如何将两个选择与连接相交? SQL

时间:2016-02-13 20:30:49

标签: mysql sql

我有一个艺术家的桌子和另一个有印刷品的桌子。我想从表格中获取所有内容,只需从表格中获取print_id。想象一下,如果我有3位艺术家A,B和C.想象一下,如果艺术家A和B参与了印刷1和2,艺术家C参与了印刷品2和3.我想要的是关于艺术家A和B的信息,因为他们参加了打印1以及他们参与的其他打印(在这种情况下,打印2)。

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

表打印: 1 - 波浪。 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
    )

2 个答案:

答案 0 :(得分: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对应于INNER JOIN,其中两个表格的联合键/选择

答案 1 :(得分: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;

我认为没有理由在print_id中选择SELECT,因为艺术家同时拥有这两者。