我有一个艺术家的桌子和另一个有印刷品的桌子。我想从表格中获取所有内容,只需从表格中获取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
)
答案 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
,因为艺术家同时拥有这两者。