Mysql 有条件地选择联接表

Mysql 有条件地选择联接表,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.

我有三张桌子A、F、R

Table A
-----
id   | type   | user_id


Table F
-----
id   | Title


Table R
-----
id   | Title
在A中有一列
Type
,该列只能包含值
f
r

现在我想有条件地选择并连接这三个表,如果列值
Type
在A is
R
中,则将行从A连接到R,如果列
Type
在A is
F
中,则将行从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