2016-02-13 82 views
1

我有一個表與藝術家和另一個與打印。我想從表格Artist中獲取所有內容,並從表格Prints中獲取print_id。想象一下,如果我有3位藝術家A,B和C.想象一下,藝術家A和B是否參加了印刷品1並且還參與了2.藝術家C參與了印刷品2和3.我想要的是關於藝術家A和B的信息,因爲他們參與了打印1,而且還打印了他們參與的其他打印件(在這種情況下,打印2)。如何將兩個選擇與連接相交? SQL

表藝術家: 藝術家A - 巴西。 藝術家B - 美國。 藝術家C - 比利時。

表格打印: 1-波。 2 - 地圖。 3 - 晚上。

結果預計: 藝術家A - 巴西 - 1 藝術家A - 巴西 - 2 藝術家乙 - 美國 - 1 藝術家乙 - 美國 - 2

我想是這樣,但我得到了一些錯誤......

SELECT 
    * 
FROM 
    (SELECT DISTINCT 
     artist.* 
     ,print.print_id 
    FROM 
     artist 
     JOIN print ON artist.artist_id = print.artist_id 
    WHERE 
     print.print_id = 1 
    INTERSECT 
    SELECT DISTINCT 
     artist.* 
     ,print.print_id 
    FROM 
     artist JOIN print ON artist.artist_id = print.artist_id 
    ) 
+1

你會得到哪些錯誤? – Ygalbel

+0

Mysql不支持相交,你必須改用inner join。 – Shadow

+1

我是否錯過了某些東西,或者這兩個查詢是相同的,除了第一個在'print_id = 1'上過濾的東西。如果是這種情況,那麼第一個查詢不會產生你想要的結果?我多次閱讀它以確保我不會在代碼中遺漏某些內容,但是如果我願意,請告訴我。 – Nicarus

回答

0

您可以嘗試使用連接的表(選擇)你有

SELECT * FROM (
    SELECT DISTINCT 
     Artist.*, 
     Print.print_id 
    FROM Artist 
    JOIN Print 
    ON Artist.artist_id = Print.artist_id 
    WHERE Print.print_id=1 
    ) as T1 
JOIN 
    (
    SELECT DISTINCT 
     Artist.*, 
     Print.print_id 
    FROM Artist 
    JOIN Print ON Artist.artist_id = Print.artist_id 
    ) as T2 
    ON T1.artist_id = T2.artist_id 

本質上選擇是在表中,而INTERSESCT對應於內部聯接與兩個表的聯合鍵的鍵/選擇

+0

這與第一個查詢(T1)返回的內容有何不同? – Nicarus

+0

只是不使用相交.. – scaisEdge

+0

我認爲這是一個測試查詢...測試相交..(我不知道爲什麼OP使用此代碼...我只是試圖解決與相交有關的問題在mysql中) – scaisEdge

0

我能理解查詢的唯一合理的方式是假定WHERE子句從第二個子查詢。

如果你想使用join檢查,如果一個藝術家有兩個打印,然後:

SELECT a.* 
FROM Artist a JOIN 
    Print p1 
    ON a.artist_id = p1.artist_id AND p1.print_id = 1 JOIN 
    Print p2 
    ON a.artist_id = p2.artist_id AND p2.print_id = 2; 

我認爲沒有理由選擇在SELECTprint_id,因爲藝術家同時具備。