在单个sql查询下运行一定数量的联接选择语句

时间:2018-10-25 03:45:17

标签: sql select

我有一个咨询预约网站。目前,我在一个表中列出客户,但在第二个表中按ID列出了夫妇,以供他们预订情侣会议时使用。即:

client
id_no     first    last
564       John     Smith
983       Mary     Jones
999       Mark     Fields
882       Joan     Hancock

couple
id_no    client1    client2
623      564        983
555      999        882

我想使用别名编写单个select语句,该语句将在单行中列出夫妇。到目前为止,我一直在进行简单的联接,然后在运行查询后使用php清理结果,但是我想在sql中清理结果,以便得到类似以下的结果

id_no   first_1   last_1   first_2    last_2
623     John      Smith     Mary       Jones
555     Mark      Fields    Joan       Hancock

我怀疑可能涉及子查询,但是我一生都无法纠缠它们以获得此结果。

更新 我只是尝试了以下方法:

SELECT id_no,first_1,last_1,first_2,last_2 
FROM ( SELECT a.id_no AS id_no, b.first AS first_1,b.last AS last_1 
       FROM couple AS a, client AS b WHERE a.client1=b.id_no ) c1 
JOIN ( SELECT a.id_no AS id_no, b.first AS first_2,b.last AS last_2 
       FROM couple AS a, client AS b WHERE a.client2=b.id_no ) c2 ON 
       (c1.id_no=c2.id_no) 

并且收到消息“字段列表中的列'id_no'不明确”。不确定我走的路是否正确

1 个答案:

答案 0 :(得分:0)

由于未为id_no指定表别名,因为该列属于两个表,因此您将得到异常,因此SQL不确定返回哪一列,因此将引发歧义的列错误。

>

此外,您不必使用子查询,只需将客户端表与一对表连接两次,一个用于client1,另一个用于client2,如下所示

Select cp.id_no, 
  cl1.first as first_1,
  cl1.last as last_1,
  cl2.first as first_2,
  cl2.last as last_2
From couple cp
inner join client cl1 on cl1.id_no = cp.client1
inner join client cl2 on cl2.id_no = cp.client2