小编典典

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

sql

我对SQL非常陌生,需要有关如何使用正确查询完成此任务的帮助。

我有2个表需要使用。表“ TB1”具有:

id Name
1  bob
2  blow
3  joe

表“ TB2”具有:

compid property
1      bob
2      blow

我试图获取“ TB2”中缺少哪个compid并将其从“ TB1”中插入

我正在做的查询是:

SELECT id, name from TB1, TB2 where id <> compid

我得到的是ID 1和2的2个输出,以及ID 3的3个输出。使用php:

for($i=0;$i <= mysql_num_rows($comp)-1; $i++)
{
 echo mysql_result($comp, $i, 0)."<br>";


}

我期望输出3,但得到了这个:

1
1
2
2
3
3
3

我了解它比较了表中的所有行,但是有没有一种方法可以实现我想要的?

谢谢你的时间。


阅读 183

收藏
2021-05-30

共1个答案

小编典典

您正在执行隐式笛卡尔坐标JOIN,其结果是每一行都与另一行相对。您需要指定JOIN两个表的属性。

使用隐式语法(不推荐):

SELECT id, name 
FROM TB1, TB2 
WHERE id <> compid
  AND TB1.Name = TB2.property <-- Column join

使用显式语法:

SELECT id, name
FROM TB1
JOIN TB2
  ON TB2.property = TB1.Name <-- Column join
WHERE id <> compid

为了实现您的目标,您需要采取以下措施:

SELECT TB1.id, TB1.name
FROM TB1
LEFT JOIN TB2
  ON TB2.property = TB1.Name
WHERE TB2.compid IS NULL

实际观看

最佳做法是始终对选定的列进行别名别名以防止歧义。

2021-05-30