回答

收藏

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

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

我对SQL很奇怪,需要帮助如何使用正确的查询来完成这个任务。/ I5 W9 X$ X  M
我有两个表要用。TB1”具有:# A2 {% c3 B/ B3 N) |+ N& g
id Name1  bob2  blow3  joe表“ TB2”具有:  }' ~# |8 y0 z" G3 m
compid property     bob二       blow我试图获取“ TB缺少哪一个?compid并将其从 开始TB1”中插入
# Z$ P/ D. V! \. x" L; n, Z我正在做的查询是:: n: u" V" l" J" ~
SELECT id,name from TB1,TB2 where id  compid我得到的是ID 1和2的两个输出,以及ID 3个输出。php:
# L, I6 V0 i& w# y! x6 E; W: hfor($i=0;$i 我期待输出3,但我得到了这个:) D. z( g) S- x. [$ Q
1122333我知道它比较了表中的一切,但是有没有办法实现我想要的呢?
' b7 W4 m, `1 h$ s& ^1 K/ }) I  O谢谢你的时间。
0 K4 x8 Q, L1 ]% ?8 u  Y& N. V5 I                                                                ' K( S2 ]3 g$ E6 H  w. ?' q
    解决方案:                                                                0 I- T, ?: D& h" X" ^% j$ V! ^
                                                                您正在执行隐式笛卡尔坐标JOIN,因此,每一行都与另一行相对。您需要指定JOIN两个表的属性。5 l3 @+ r" P# W2 U! m
使用隐式语法(不推荐):
" l$ W$ P( D, A$ L4 m! }/ ISELECT id,name FROM TB1,TB2 WHERE id  compid  AND TB1.Name = TB2.property 使用显式语法:
  h: G* y: K4 W: N" @0 g' r+ XSELECT id,nameFROM TB1JOIN TB2  ON TB2.property = TB1.Name  compid为实现您的目标,您需要采取以下措施:
1 ]; y3 a. @# R3 T- L: `0 e/ tSELECT TB1.id,TB1.nameFROM TB1LEFT JOIN TB2  ON TB2.property = TB1.NameWHERE TB2.compid IS NULL实际观看最好的办法是一直对所选列进行别名,以防歧义。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则