一张表多个字段是另一张表的主键,求关联查询语句

MySql 码拜 8年前 (2017-05-07) 2569次浏览
现有
A表one two three三个字段
B表 id name 字段
A表的三个字段都是和B表的ID关联起来的。
问一下怎么样查询才能在查询的时候查出A表one two three 这三个值为id的对应name呢?
解决方案

10

SELECT B.name from B INNER JOIN A where A.one = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.two = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.three = B.id

10

引用:
Quote: 引用:
SELECT B.name from B INNER JOIN A where A.one = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.two = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.three = B.id

谢谢,可以查询出相应字段的数据,但是会重复,问一下是为什么呢

one、two、three这个三个字段的id值一样,读出来的那么一样。
或id值不一样的有那么值一样的

10

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:
SELECT B.name from B INNER JOIN A where A.one = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.two = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.three = B.id

谢谢,可以查询出相应字段的数据,但是会重复,问一下是为什么呢

one、two、three这个三个字段的id值一样,读出来的那么一样。
或id值不一样的有那么值一样的

不是的,您误会本人的意思了,本人举个例子,只执行第一条SELECT语句,就会出现4条一样的NAME。
大致知道是原因是笛卡尔积的原因,可是不太明白应该怎么解决呢

额,还是不太懂你的意思,第一条select是啥意思?要是能给些测试数据最好了。
现在不知道数据啥样,但是可以这样试试。

SELECT DISTINCT * FROM (
SELECT B.name from B INNER JOIN A where A.one = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.two = B.id
UNION all 
SELECT B.name from B INNER JOIN A where A.three = B.id)t

60

引用:

和期望的结果有差距,无法进一步操作。
准确的说,想要的效果是查询结果是一条记录……能实现吗?
更正一下数据库结构:
A表:id、name、one、two、three
B表:id、name、parentid(B表自关联)
现在项目中的需求是,把全部的数据列表,每一条A记录占一行,A记录中one two three的位置显示为B表中对应的name。
请各位高手帮忙解答一下,谢谢!

语句:

--测试数据
;WITH A(id,name,one,two,three)AS(
select 1,"A",1,2,3 UNION ALL
select 2,"B",3,4,5
),B(id,name)AS
(
SELECT 1,"id1" UNION ALL
SELECT 2,"id2" UNION ALL
SELECT 2,"id2" UNION ALL
SELECT 3,"id3" UNION ALL
SELECT 4,"id4" UNION ALL
SELECT 5,"id5" 
)
--测试数据结束
SELECT  id ,
        A.name ,
        ( SELECT TOP 1
                    name
          FROM      B
          WHERE     A.one = B.id
        ) AS one ,
        ( SELECT TOP 1
                    name
          FROM      B
          WHERE     A.two = B.id
        ) AS two ,
        ( SELECT TOP 1
                    name
          FROM      B
          WHERE     A.three = B.id
        ) AS three
FROM    A;

结果:
一张表多个字段是另一张表的主键,求关联查询语句


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一张表多个字段是另一张表的主键,求关联查询语句
喜欢 (0)
[1034331897@qq.com]
分享 (0)