2016-04-06 2 views
0

Предположим у меня есть три таблицы:MySql присоединиться заявление со всеми строками в левой таблице

1. Fields 
ID 
NAME 

2. DATA 
ID 
f_id 
p_id 
data 

3. PROJECT 
ID 

И мне нужно, чтобы выбрать все строки из таблицы полей каждый раз с разными данными (в зависимости от того, что проект мне нужно) Поэтому каждый раз, когда у меня будут все строки полей, и если у проекта X нет данных для некоторого поля, он вернет пустую строку.

Я попытался следующим SQL заявления:

SELECT * FROM field as f 
left data as d on f.ID = d.f_id 
WHERE d.p_id = 'X' 

Это будет возвращать только те строки, которые проектируют X имеют некоторые данные и не будет возвращать пустые строки, если нет данных.

Я также попытался:

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 

Это будет возвращает все строки из полей, но и возвращать другие данные проекты, и если больной добавить где заявление его не будет возвращать пустые строки, если проект не имеет никаких данных.

Я также попытался: только

SELECT * FROM field as f 
left join data as d on f.ID = d.f_id 
left join project as p on p.ID = d.p_id 
WHERE (p.ID == 'x' || p.ID is null) 

Но это возвращение поля строк, если строки не используются по другому проекту, и если есть поле, другой проект, используя его, так что я не получите это поле. (не получая al строк из левой таблицы)

Как я могу выбрать все строки из левой таблицы (полей) в любом случае, также, если у проекта нет данных?

+0

Ужасные названия таблиц, поле и данные ... – jarlh

+0

Его только для примера, а не настоящие имена @jarlh – Jordan

ответ

0

SELECT * FROM полей, как F LEFT JOIN DATA AS D ВКЛ F.ID = D.ID LEFT JOIN проект как P = ON F.ID P.ID

+0

Предоставьте некоторое объяснение с ответом. – Jester

0

SELECT * FROM поле F слева объединить данные в г на f.ID = d.f_id ГДЕ ISNULL (d.p_id, 'Х') = 'X'

SELECT * FROM поле F левых данных как на д f.ID = й. f_id WHERE (d.p_id = 'X' или d.p_id null)

+0

Предоставьте некоторое объяснение с ответом. – Jester

0

Хорошо, позвольте мне видеть, сначала я бы сделал это:

SELECT F.* FROM field F 
    LEFT data D ON F.id = D.f_id 
    WHERE D.p_id = 'X'; 

Потому что вы сказали, что хотите получать данные только из поля таблицы, верно? Если вы оставите * там без префикса таблицы, он предоставит вам все данные, которые у вас есть на каждой таблице, которую вы имеете на соединениях, и вы можете иметь неоднозначную ошибку из-за идентификатора столбцов, который у вас есть на каждой таблице.

Другое дело, я взял AS, потому что она, как правило, лучше подходит для размещения на псевдонимы имен столбцов, таких как:

"COUNT(ID) AS COUNTER" 

И мне очень жаль, но так, как я это вижу, что проблема может быть решение. Почему вы хотите выбрать пустые строки? Вы имеете в виду столбцы или строки?

Смежные вопросы