表1:
查询:创建表客户端(
applicationNo int主键,
名称varchar(20)
);
Insert语句:插入客户值(1,'XYZ'),(1,'ABC'),(1,'DEF');
应用程序编号|名称
1 | XYZ公司
2 | ABC公司
3 |定义
表2:
查询:创建表客户端(
应用程序没有int,
电话号码Bigint,
外键(applicationNo)引用客户端(applicationNo),
主键(applicationNO,phoneNo)
);
插入电话号码值(1999999),(1888888),(2777777),(3666666),(3555555);
申请号|电话号码
1 | 999999个
1 | 8888888
2 | 77777
3 | 666666个
3 | 555555
我可以通过连接两个表来检索元组吗?这样可以得到以下输出,但是使用单个查询,而且我使用的是mysql 5.1
应用程序编号|名称|电话号码1 |电话号码2
1 | XYZ | 999999 | 88888
2 | ABC | 77777 |空
3定义66666 555555
编辑:附加信息
我试着用这个叫做交叉表的东西,但是我不能在case语句中使用totalPhoneNo
选择applicationNo,count(phoneNo)作为totalPhoneNo,
和(当totalPhoneNo=1时,则phoneNO ELSE为空结束)作为phoneNo1,
和(当totalPhoneNO=2时,则phoneNo ELSE为空结束)作为phoneNo2
从phoneNO按applicationNo分组;

最佳答案

尝试:

select c.applicationNo,
       max(c.name) name,
       max(p.phoneNo) phoneNo1,
       case
           when max(p.phoneNo) = min(p.phoneNo) then NULL
           else min(p.phoneNo)
       end phoneNo2
from client c
left join phoneNo p on c.applicationNo = p.applicationNo
group by c.applicationNo

关于sql - 使用单个查询通过连接两个表来检索多值属性,而不会导致mysql中的字段重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3717714/

10-11 10:38