嗨,我有以下查询,我想知道这是什么意思:
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)
此查询创建一个包含所有可能的联系人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)