我是SQL的新手
当我执行以下查询时,它返回以下结果:
SELECT table1.image_name, table1.item_id
FROM table1, table2, table3
WHERE table2.catagory="item"
AND table3.account_id=59
image_name image_id
-------------------------
d9.jpg 89
d9.jpg 89
d9.jpg 89
d9.jpg 89
d10.jpg 90
d10.jpg 90
d10.jpg 90
d10.jpg 90
etc.....
结果重复相同的属性四次!我不明白为什么会这样,我无法在任何地方找到理由!
我有3个表,table1 PK(image_id)在Item中被引用为FK。项目PK(Item_id)在表3中用FK引用。 table3具有表4(account_id)和table2(item_id)的复合键。
我的查询显然是错误的,但我不明白为什么?我希望有人可以对结果提供解释!或帮我指出正确的方向!
由于
答案 0 :(得分:5)
您列出了3个表,并且只加入其中两个表。 这意味着你将从连接中获得一行,并且它将对第三个表中的每一行重复一次(在你的情况下为table1)
答案 1 :(得分:3)
您必须明确说明加入条件 - 否则您将获得所有项目的所有3个表格的笛卡儿积分59
where table1.image_id = table2.item_id
and table2.item_id = table3.item_id
and ...
答案 2 :(得分:1)
在这种情况下,您需要使用DISTINCT
,因为您有多行匹配相同的信息:
SELECT DISTINCT table1.image_name, table1.item_id
FROM table1, table2, table3
WHERE table2.catagory="item"
AND table3.account_id=59
但是,正如其他人所提到的,您需要指定加入您正在使用的表格的条件,例如:
SELECT DISTINCT table1.image_name, table1.item_id
FROM table1
JOIN table2 on table2.item_id = table1.item_id
JOIN table3 on table3.item_id = table1.item_id
WHERE table2.catagory="item"
AND table3.account_id=59
或者:
SELECT DISTINCT table1.image_name, table1.item_id
FROM table1, table2, table3
WHERE table1.item_id = table2.item_id
AND table1.item_id = table2.item_id
AND table2.catagory="item"
AND table3.account_id=59
答案 3 :(得分:1)
也许我误解了这个问题,但除了上面提到的海报中添加“Distinct”之外,我认为你还需要将表3和表2之间的关系放在Where子句中。根据你的描述,我认为像下面这样的东西会起作用。可能需要一些额外的条件,具体取决于表格的实际结构。
SELECT DISTINCT table1.image_name, table1.item_id
FROM table1, table2, table3
WHERE table2.catagory="item"
AND table3.account_id=59
AND table3.item_id = table2.item_id
答案 4 :(得分:1)
您获得多个结果,因为您没有指定连接条件。外键关系很好,但您需要指定它们适用于您的查询:
SELECT table1.image_name, table1.item_id
FROM table1, table2, table3
WHERE table2.catagory="item"
AND table3.account_id=59
AND table1.id = table2.item_id
AND table2.item_id = table3.id
注意最后两个条件。您需要根据自己的需要进行更改。
答案 5 :(得分:0)
SELECT DISTINCT table1.image_name, table1.item_id FROM table1, table2, table3 WHERE table2.catagory="item" AND table3.account_id=59
虽然这更像是一种解决方法..
如果您可以更清楚地指定表格的结构,那将会很有帮助
答案 6 :(得分:0)
您可能没有选择某些列,这会使该行看起来唯一。因此,可能您的查询工作正常,但是,由于您未选择所有列,因此它们显示为重复行。