我有一张桌子,上面有艺术家,另一张桌子上有印刷品。我想从表Artist中获得所有内容,而仅从表Prints中获得print_id。想象一下,如果我有3位艺术家A,B和C。想象一下,如果艺术家A和B参加了版画1和2。艺术家C参加了版画2和3。我想要的是关于艺术家A和B的信息,因为他们参加了打印1以及他们参与的其他打印(在这种情况下,打印2)。

餐桌艺术家:
艺术家A-巴西。
艺术家B-美国。
艺术家C-比利时。

表格打印:
1-Wave。
2-地图。
3-晚。

预期结果:
艺术家A-巴西-1。
艺术家A-巴西-2。
艺术家B-美国-1。
艺术家B-美国-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
    )

最佳答案

您可以尝试对具有的表(选择)使用联接

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对应于具有两个表/选择的联合键绑定的INNER JOIN

10-02 02:08
查看更多