簡體   English   中英

如何以相同的方式轉換多列外鍵

[英]How to convert multiple column foreign keys in the same way

我有一個表relationship

+-----------+-----------+--------------+
| playerid1 | playerid2 | relationship |
+-----------+-----------+--------------+
|         1 |         3 | friend       |
|         1 |         2 | enemy        |
+-----------+-----------+--------------+

和另一個桌上player

+----+--------+
| id | name   |
+----+--------+
|  1 | Hattie |
|  2 | Jazz   |
|  3 | Ben    |
+----+--------+

我想返回所有像'Hattie', 'Jazz'這樣的敵人

我擁有的最好的是:

select 
  player1.name, 
  player2.name 
from 
  (
    select 
      player.name 
    from 
      player, 
      relationship r 
    where 
      r.relationship = 'enemy' 
      and player.id = r.playerid1
  ) player1, 
  (
    select 
      player.name 
    from 
      relationship r, 
      player 
    where 
      r.relationship = 'enemy' 
      and player.id = r.playerid2
  ) player2;

這是這么長。 每個玩家都有邏輯重復。

有沒有辦法讓它更短?

我當然可以select playerid1, playerid2 from relationship where relationship = 'enemy'; 在兩列中獲取 id,所以我真的懷疑必須有比我在上面手動創建的更優雅的列式外鍵引用查找。

你可以加入玩家表兩次

SELECT 
   p1.name,p2.name
FROM
relationship rl JOIN player p1 ON r.playerid1  = p1.id
JOIN player p2 ON r.playerid2  = p2.id
WHERE r.relationship = 'enemy' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM