MySQL SELECT不为null时

时间:2012-09-05 06:55:40

标签: mysql multiple-tables

我正在尝试进行查询,其中使用了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,则查询将不起作用,因为它显然不是有效链接。所以我想知道如何只查找存在的值。

6 个答案:

答案 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)

INNER JOIN

怎么样?
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;