我是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输出,以及来自id 3的2和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
我理解它比较表中的所有行但是有没有办法实现我想要的东西?
感谢您的时间。
答案 0 :(得分: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
最佳做法是始终为您选择的列设置别名,以防止出现歧义。
答案 1 :(得分:0)
要选择它,您可以这样做:
SELECT *
FROM TB1
WHERE id NOT IN (
SELECT compid
FROM TB2
);