2017-11-13 26 views
1

このクエリにB値はなくA値がある場合、値がない場合はnullを持つことができますか?例えばサブクエリに値sqlがない場合はnullを返します

SELECT A, B 
FROM 
(SELECT title as A 
FROM TABLE1 
INNER JOIN TABLE2 ON TABLE1_TABLE2_ID = TABLE2_ID 
INNER JOIN TABLE3 ON TABLE1_TABLE3_ID = TABLE3_ID 
WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'A'), 

(SELECT title as B 
FROM TABLE1 
INNER JOIN TABLE2 ON TABLE1_TABLE2_ID = TABLE2_ID 
INNER JOIN TABLE3 ON TABLE1_TABLE3_ID = TABLE3_ID 
WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'B') 

、このテーブルは

A  B 
--------------- 
Computer null 

を示さなければなりません。しかし、今では値を示しIdはタイプAとタイプB

+2

FULL OUTER JOINを見てください – mrks

+0

'A'と' B'サブクエリのためにいくつの行が得られますか? – MT0

+0

@ MT0、それは常に異なる値です –

答えて

1

を持っている場合にのみLEFT CROSS JOINのようなものはありません、 LEFT JOINを使用して実装できます。

SELECT a.A, b.B 
FROM (SELECT title as A 
     FROM TABLE JOIN 
      TABLE2 
      ON TABLE_TABLE2_ID = TABLE2_ID JOIN 
      TABLE3 
      ON TABLE_TABLE3_ID = TABLE3_ID 
     WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'A' 
    ) a, LEFT JOIN 
    (SELECT title as B 
     FROM TABLE JOIN 
      TABLE2 
      ON TABLE_TABLE2_ID = TABLE2_ID JOIN 
      TABLE3 
      ON TABLE_TABLE3_ID = TABLE3_ID 
     WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'B' 
    ) b 
    ON 1 = 1; 
+0

ありがとう、それは仕事です。 「ON 1 = 1」とはどういう意味ですか? –

+0

@EmmaW。 。 。 。それは単に常に真であると評価される式です。 –

0
SELECT A, B 
FROM 
(SELECT title as A 
FROM TABLE 
INNER JOIN TABLE2 ON TABLE_TABLE2_ID = TABLE2_ID 
INNER JOIN TABLE3 ON TABLE_TABLE3_ID = TABLE3_ID 
WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'A')AA 
left join 
(SELECT title as B 
FROM TABLE 
INNER JOIN TABLE2 ON TABLE_TABLE2_ID = TABLE2_ID 
INNER JOIN TABLE3 ON TABLE_TABLE3_ID = TABLE3_ID 
WHERE TABLE_TABLE3_ID = 2008 AND TABLE_TYP LIKE 'B')BB 
on AA.A=BB.B 

Hope this will solve your problem... 
1

あなたが持っているもののデータは不明ですが、あなたはTABLE_TYPあたりゼロまたは-1行期待しているときに、PIVOTを使用し、自己結合を避けることができます。

SQL Fiddle

Oracleの11グラムR2スキーマをセットアップ

CREATE TABLE TABLE1 (table1_table2_id, table1_table3_ID) AS 
SELECT 1, 2008 FROM DUAL; 

CREATE TABLE TABLE2 (table2_ID, table_typ) AS 
SELECT 1, 'A' FROM DUAL; 

CREATE TABLE TABLE3 (table3_ID, title) AS 
SELECT 2008, 'Computer' FROM DUAL; 

クエリ1

SELECT * 
FROM (
    SELECT title, 
     table_typ 
    FROM TABLE1 
     INNER JOIN TABLE2 ON TABLE1_TABLE2_ID = TABLE2_ID 
     INNER JOIN TABLE3 ON TABLE1_TABLE3_ID = TABLE3_ID 
    WHERE TABLE1_TABLE3_ID = 2008 
    AND TABLE_TYP IN ('A', 'B') 
) 
PIVOT (MAX(title) FOR Table_Typ IN ('A' AS A, 'B' AS B)) 

Results

|  A |  B | 
|----------|--------| 
| Computer | (null) | 

あなたのサブクエリは複数行を返すように期待しているなら、あなたはこの正確な方法を使用することができる(それでもmay be able to use PIVOT、および自己結合を避けるため、依存しないでしょうあなたの要求に応じて)。

+0

ありがとうございますが、それは私が必要とするものではありません。そのため、テーブルからすべてのデータを読み込む必要があり、これを 'sqldatareader'で使用します。 –

関連する問題