是否可以在选择查询中使用同一个表两次?

loc*_*boy 11 sql

嗨,我有以下查询,我想知道这是什么意思:

SELECT c1.id as sender, c2.id as replier
   FROM contacts c1, contacts c2;
Run Code Online (Sandbox Code Playgroud)

你怎么能两次使用同一张桌子?

Jon*_*ler 16

您在查询中使用一个表两次,通过给它两个名称,就像这样.

通常使用关键字AS引入别名.您通常也会指定一个连接条件(如果没有它,您将获得与自身连接的表的笛卡尔积).您首选使用显式JOIN表示法.

SELECT c1.id AS sender, c2.id AS replier
  FROM contacts AS c1
  JOIN contacts AS c2 ON c1.xxx = c2.yyy;
Run Code Online (Sandbox Code Playgroud)

在此示例中,不清楚哪些列可能用于连接; 我们没有任何信息可以帮助解决这个问题.

通常,还有另一个表作为中介,例如Messages表:

SELECT c1.id AS sender,  c1.email AS sender_email,
       c2.id AS replier, c2.email AS replier_email,
       m.date_time
  FROM messages AS m
  JOIN contacts AS c1 ON m.sender_id  = c1.id
  JOIN contacts AS c2 ON m.replier_id = c2.id;
Run Code Online (Sandbox Code Playgroud)


Ray*_*oal 9

此查询创建一个包含所有可能的联系人ID对的表.

例如,如果您的联系ID为1,2和3,那么您将得到

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
Run Code Online (Sandbox Code Playgroud)