2017-11-24 10 views
1

いくつかのSQLクエリの専門家の助けを捜しています。1フィールドの2つのテーブルから2つのフィールド値の和集合を取得するにはどうすればよいですか?

以下のSQL文で問題を解決するのに苦労します。これは3つのテーブルの結合SQL文です。人と卒業生のテーブルから同様の種類のデータが必要です。また、両方のテーブルでフィールド名も同じです。ですから私の質問は、私が1つのフィールドで同様のデータを取得するためのものですか?

SELECT DISTINCT P.people_id, P.Name,P.Journal_name, N.People_id, N.Name, N.Journal_name 
FROM `Paper_Author` AS A 
LEFT JOIN `People` AS P ON (A.Author_id = P.people_id) 
LEFT JOIN `Alumni` AS N ON (A.Author_id = N.People_id) 
WHERE A.Paper_id =2067 
ORDER BY A.Author_sortorder 
LIMIT 0 , 30 

現在の結果のEgがある:

Id-- Name-- Journal_name-- ID2-- Name-- Journal_name 
    1 Name1  A1   NULL NULL   NULL 
    2 Name2  B1   5 Name10   NULL 
    3 Name3  C1   3 Name3   C1 

期待される結果:

Id-- Name-- Journal_name-- 
    1 Name1  A1   
    2 Name2  B1   
    3 Name3  C1     
    5 Name10 NULL 

私は私が単一で同様の値が提出され得ることができるかどうか知りたいですか?例:単一フィールドのJournal_nameと

+0

NULLの完全な行は何ですか? – madalinivascu

+0

より良い組合をここに試してください – madalinivascu

+0

@マダルインバスカ空のレコード。 table1とtable2は全く同じテーブルです。ほとんどの時間私はt1またはt2のいずれかで特定の人を見つけることができます。ほとんどの場合、両方で見つけることができます。 – RAWhoLovesMusic

答えて

1

UNIONがこの作業に適しています。 UNIONステートメントを使用すると、両方の結果を1つの結果セットにまとめることができます。

SELECT DISTINCT P.people_id, P.Name, P.Journal_name, AP.Author_sortorder 
FROM `Paper_Author` AS AP 
LEFT JOIN `People` AS P ON (A.Author_id = P.people_id) 
WHERE AP.Paper_id = 2067 
UNION 
SELECT DISTINCT N.People_id, N.Name, N.Journal_name, AN.Author_sortorder 
FROM `Paper_Author` AS AN 
LEFT JOIN `Alumni` AS N ON (A.Author_id = N.People_id) 
WHERE AN.Paper_id = 2067 
ORDER BY Author_sortorder 
関連する問題