我对 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
我理解它比较表中的所有行,但是有没有办法实现我正在寻找的东西?
谢谢你的时间。
您正在执行隐式笛卡尔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
查看实际效果 http://sqlfiddle.com/#!2/dac4e/1
最佳实践是始终为您选择的列添加别名以防止歧义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)