回答

收藏

尝试通过比较其他表从SQL查询输出正确的值

技术问答 技术问答 472 人阅读 | 0 人回复 | 2023-09-12

我对SQL很奇怪,需要帮助如何使用正确的查询来完成这个任务。" U7 K$ x$ y& d) q: c; i; |
我有两个表要用。TB1”具有:
" S$ t$ a9 s2 Uid Name1  bob2  blow3  joe表“ TB2”具有:
8 o" G" b- @2 B2 [+ \9 j9 ?compid property     bob二       blow我试图获取“ TB缺少哪一个?compid并将其从 开始TB1”中插入
( K4 V# o! B; J+ f) N6 \我正在做的查询是:% V; N3 s$ X  a% [2 n8 O
SELECT id,name from TB1,TB2 where id  compid我得到的是ID 1和2的两个输出,以及ID 3个输出。php:
, a' u( Y2 e% [& x2 {' i3 @4 W0 p  m$ f, Ofor($i=0;$i 我期待输出3,但我得到了这个:& z: J! Q& R& G2 ]
1122333我知道它比较了表中的一切,但是有没有办法实现我想要的呢?
3 x/ h" u2 U. s谢谢你的时间。
& w$ n1 w! O4 [/ [                                                               
- w& s  y0 ^+ U) p* @# x5 s    解决方案:                                                               
7 d# ^( `, [9 P/ D6 B9 O                                                                您正在执行隐式笛卡尔坐标JOIN,因此,每一行都与另一行相对。您需要指定JOIN两个表的属性。
/ c, {* Z. @* V! g使用隐式语法(不推荐):
1 `, r& M! L7 j$ C0 g. i: vSELECT id,name FROM TB1,TB2 WHERE id  compid  AND TB1.Name = TB2.property 使用显式语法:
& D9 _8 ]+ e! CSELECT id,nameFROM TB1JOIN TB2  ON TB2.property = TB1.Name  compid为实现您的目标,您需要采取以下措施:
9 H5 m' N  H1 [( }6 H3 a( ?6 N% YSELECT TB1.id,TB1.nameFROM TB1LEFT JOIN TB2  ON TB2.property = TB1.NameWHERE TB2.compid IS NULL实际观看最好的办法是一直对所选列进行别名,以防歧义。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则