0

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

4

6 回答 6

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;

但是,如果您只需要这 2 行之一具有现有数据,您可以这样做:

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
于 2012-09-05T06:57:47.467 回答
1

下面的查询将仅返回所有 3 个表中存在值的匹配行。

SELECT table1.id, table2value, table3value
FROM table1 inner join table2 on  table1value1 = table2.id
inner join table3 on table1value2 = table3.id;
于 2012-09-05T06:57:47.380 回答
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;
于 2012-09-05T06:58:29.687 回答
0

尝试这个:

SELECT table1.id, 
       table2value,
       table3value
FROM   table1
JOIN   table2
ON     table1value1 = table2.id
JOIN   table3
ON     table1value2 = table3.id;
于 2012-09-05T06:58:37.907 回答
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;
于 2012-09-05T06:58:44.600 回答
0

你应该使用INNER JOIN.

SELECT table1.id, table2value, table3value
FROM table1 
    INNER JOIN table2 ON table1value1 = table2.id
    INNER JOIN table3 ON table1value2 = table3.id;
于 2012-09-05T06:59:53.567 回答