我有几个MySQL表,其中有关于音乐会的数据。以下是艺术家和表演表中的相关字段:
---------------------- --------------------
| Artists | | Shows |
|--------------------| |------------------|
| ArtistID (PK) | | ShowID (PK) |
| ArtistName | | ArtistID (FK) | <--- references Artists(ArtistID)
| | | OpenedForID (FK) | <--- also references Artists(ArtistID)
---------------------- --------------------
我写了这个查询,列出了每个开放乐队和他们为之开放的乐队:
select ArtistName, OpenedForID
from Artists, Shows
where Shows.ArtistID = Artists.ArtistID
and OpenedForID != 999;
…它给出了以下结果:
------------------------------
| ArtistName | OpenedForID |
|----------------------------|
| Small Band A | 4 |
| Small Band B | 5 |
| Small Band C | 6 |
------------------------------
我想要的,不知道怎么做,是在第二列显示ArtistName而不是OpenedForID。所以,使用FK显示的值。OpenedForID,它引用了艺术家。,以获取相应的ArtistName。我整个上午都在这里找答案,但没找到。我今天有点不舒服,所以我可能错过了一些明显的东西。
最终结果应该看起来更像这样:
--------------------------------
| ArtistName | OpenedFor |
|------------------------------|
| Small Band A | Larger Band D |
| Small Band B | Larger Band E |
| Small Band C | Larger Band F |
--------------------------------
如果您有两个引用,请连接另一个Artist表。
但是使用join它们现在已经有30年了,应该一直使用,没有例外
select a1.ArtistName, a2.ArtistName
from Artists a1
JOIN Shows s ON s.ArtistID = a1.ArtistID
JOIN Artists a2 ON s.OpenedForID = a2.ArtistID
WHERE s.OpenedForID != 999;