3

我对 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

我了解它比较表中的所有行但是有没有办法实现我正在寻找的东西?

谢谢你的时间。

4

2 回答 2

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

看到它在行动

最佳做法是始终为您选择的列设置别名以防止出现歧义。

于 2012-12-03T18:29:29.207 回答
0

要选择它,您可以执行以下操作:

SELECT * 
FROM TB1 
WHERE id NOT IN (
    SELECT compid 
    FROM TB2
);
于 2012-12-03T18:28:53.933 回答