Mysql 有条件地选择联接表
我有三张桌子A、F、RMysql 有条件地选择联接表,mysql,left-join,Mysql,Left Join,我有三张桌子A、F、R Table A ----- id | type | user_id Table F ----- id | Title Table R ----- id | Title 在A中有一列Type,该列只能包含值f或r 现在我想有条件地选择并连接这三个表,如果列值Type在A isR中,则将行从A连接到R,如果列Type在A isF中,则将行从A连接到F 我试过了 SELECT a.*,f.* FROM `A` a INNER JOIN F ON F.
Table A
-----
id | type | user_id
Table F
-----
id | Title
Table R
-----
id | Title
在A中有一列Type
,该列只能包含值f
或r
现在我想有条件地选择并连接这三个表,如果列值Type
在A isR
中,则将行从A连接到R,如果列Type
在A isF
中,则将行从A连接到F
我试过了
SELECT a.*,f.* FROM `A` a
INNER JOIN F ON F.type= a.type AND a.type = 'f'
INNER JOIN R ON F.type= a.type AND a.type = 'r'
我得到的是空行您很接近,但需要更改为左连接并使用合并。。。如果第一个值为null,它将从另一个表中获取。。。但是您的示例结构实际上并不匹配,因为在“F”和“R”表中没有显示“TYPE”列
不过,也就是说,如果您还可以提供一些示例数据来显示每个表的上下文以及您所期望的内容,则会有所帮助。在f和r中键入会更容易,否则您可以在联接之前添加它
DECLARE @a TABLE(id INT, type VARCHAR(1), user_id int)
DECLARE @f TABLE(id INT, title VARCHAR(2))
DECLARE @r TABLE(id INT, title VARCHAR(2))
INSERT INTO @a
SELECT 1,'r',1
UNION ALL
SELECT 2,'f',2
INSERT INTO @f
SELECT 1,'f1'
UNION ALL
SELECT 2,'f2'
INSERT INTO @r
SELECT 1,'r1'
UNION ALL
SELECT 2,'r2'
SELECT a.*,b.*
FROM @a a
INNER JOIN (
SELECT *,'r' AS type FROM @r
UNION ALL
SELECT *,'f' AS type FROM @f
) AS B ON B.type = a.type
DECLARE @a TABLE(id INT, type VARCHAR(1), user_id int)
DECLARE @f TABLE(id INT, title VARCHAR(2))
DECLARE @r TABLE(id INT, title VARCHAR(2))
INSERT INTO @a
SELECT 1,'r',1
UNION ALL
SELECT 2,'f',2
INSERT INTO @f
SELECT 1,'f1'
UNION ALL
SELECT 2,'f2'
INSERT INTO @r
SELECT 1,'r1'
UNION ALL
SELECT 2,'r2'
SELECT a.*,b.*
FROM @a a
INNER JOIN (
SELECT *,'r' AS type FROM @r
UNION ALL
SELECT *,'f' AS type FROM @f
) AS B ON B.type = a.type