我正在尝试进行查询,其中使用了3个表。第一个,table1,用于存储table2和table3的id值以及一些其他数据。在某些情况下,table2或table3中都没有存储任何值,有些情况涉及一个或另一个,有些涉及两者。
问题是当table2或table3中没有值时,SQL会尝试查找NULL值,如下所示:
SELECT table1.id, table2value, table3value
FROM table1, table2, table3
WHERE table1value1 = table2.id AND table1value2 = table3.id;
因此,在此查询中,如果table1value1或table1value2为NULL,则查询将不起作用,因为它显然不是有效链接。所以我想知道如何只查找存在的值。
答案 0 :(得分:2)
请改用INNER JOIN
。它将表与所有表中现有数据的条件连接在一起。否则不会返回该行。
SELECT table1.id, table2.value, table3.value
FROM table1
INNER JOIN table2
ON table1.value1 = table2.id
INNER JOIN table3
ON table1.value2 = table3.id;
但是如果您只需要这两行中的一行来获得现有数据,您可以这样做:
SELECT table1.id, table2.value, table3.value
FROM table1
LEFT JOIN table2
ON table1.value1 = table2.id
LEFT JOIN table3
ON table1.value2 = table3.id;
WHERE table2.id IS NOT NULL OR table3.id IS NOT NULL
答案 1 :(得分:1)
以下查询将仅返回所有3个表中存在值的匹配行。
SELECT table1.id, table2value, table3value
FROM table1 inner join table2 on table1value1 = table2.id
inner join table3 on table1value2 = table3.id;
答案 2 :(得分:0)
我认为你需要使用INNER JOIN
,并且根据定义,INNER JOIN
关键字在两个表中至少有一个匹配时返回行。
SELECT table1.id, table2.value, table3.value
FROM table1
INNER JOIN table2
ON table1.value1 = table2.id
INNER JOIN table3
ON table1.value2 = table3.id;
答案 3 :(得分:0)
试试这个:
SELECT table1.id,
table2value,
table3value
FROM table1
JOIN table2
ON table1value1 = table2.id
JOIN table3
ON table1value2 = table3.id;
答案 4 :(得分:0)
SELECT table1.id, table2value, table3value
FROM table1 INNER JOIN table2 ON table1.value1 = table2.id,
INNER JOIN table3 ON table1.value2 = table3.id;
答案 5 :(得分:0)
您应该使用INNER JOIN
。
SELECT table1.id, table2value, table3value
FROM table1
INNER JOIN table2 ON table1value1 = table2.id
INNER JOIN table3 ON table1value2 = table3.id;