永发信息网

关于数据库多表查询的问题

答案:2  悬赏:20  手机版
解决时间 2021-03-10 06:34
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-03-09 08:57
要是我有两张表一张表里面是
userid password replynum
另一张表里面是
times userid message(里面的很多userid是相同的)
现在要查询出userid='a'的password和message
我是select userId,times,message,replynum from users ,message where users.userId=message.userId=message.userId='a';
这样写的 可是他报错说Column 'userid' in field list is ambiguous
这是什么原因?
最佳答案
  • 五星知识达人网友:鱼忧
  • 2021-03-09 09:40
Column 'userid' in field list is ambiguous
这句话的意思是说对'userid'有歧义,就是说在两张表里面都有这个属性,你必须显示的说明你要查询的'userid'到底是那张表的,而且我记得where子句中的条件应该没有这样写的吧,我修改了一下,给你做个参考:select users.userId,times,message,replynum from users ,message where users.userId=message.userId and message.userId='a';
全部回答
  • 1楼网友:往事隔山水
  • 2021-03-09 09:54
我们通常使用的表之间的联接是等值联接;你的情况需要使用外联接来做。 我按照你的意思分别见了table1,table2,table0(对应你的table表),并把你的数据也增加进去了。 执行下面的sql可能会得到你想要的结果: (selecttable1.hm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable1.hmisnotnull) union (selecttable2.hm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable2.hmisnotnull) 输出结果如下: 希望是你想要的! 刚才没用到table0表,如果保证hm的值必须在table0中,如要修改上面的sql如下: select*from(selecttable1.hmashm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable1.hmisnotnull union selecttable2.hmashm,table1.no1,table2.no2fromtable1fullouterjointable2on(table1.hm=table2.hm)wheretable2.hmisnotnull)astwheret.hmin(selecthmfromtable0) 这样,当table1,table2中的hm值不在table0表中,查询结果就不会出现。 外联接,包括左外联接、右外联接、全外联接的确大多数的程序员都不使用。宁肯用很长的程序代码来实现,但是用数据库sql来实现其实效率是最快的。 建议你了解外联接的知识。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯