2015-06-15 2 views
0

У меня есть три таблицы A, F, Rвыберите Объединить таблицы условно

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


Table F 
----- 
id | Title 


Table R 
----- 
id | Title 

В А существует столбец Type, который может содержать только значение f или r.

Теперь я хочу, чтобы выбрать и соединить три таблицы условно, вступив строки от А до Я, если значение Type столбец А r и соединения строк от А до F, если столбец Type в А 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' 

Я получаю я пустая строка

ответ

1

Вы близки, но нужно изменить на СЛЕВА-РЕГИСТРИРУЙТЕСЬ и использовать сливаются ... если первое значение равно нулю, она захватывает с другой т но ваши типовые структуры действительно не соответствуют, поскольку вы не показываете столбец «TYPE» в таблицах «F» и «R».

SELECT 
     a.*, 
     COALESCE(f.title, r.title) as WhichTitle 
    FROM 
     `A` a 
     LEFT JOIN F 
      ON a.type = F.type 
     LEFT JOIN R 
      ON a.type = R.type 
    where 
     a.type = 'f' 
     or a.type = 'r' 

Однако, что сказал, если вы также можете предоставить некоторые данные примеры, чтобы показать контекст каждой таблицы и то, что вы ожидаете, это поможет.

1

Было бы легче иметь тип в е и г еще вы можете добавить его, прежде чем присоединиться к

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 
Смежные вопросы