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つの行の1つだけに既存のデータを含める必要がある場合は、次のようにすることができます。

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両方のテーブルに少なくとも1つの一致がある場合、キーワードは行を返します。

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

INNERJOINはどうですか

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 に答える