Какой метод соединения или запроса будет возможен?MYSQL Быстрый вопрос? - PullRequest
1 голос
/ 01 августа 2011

Очень быстрый вопрос!

Если таблица FK имеет нулевое значение, есть ли способ, которым я могу разработать свой запрос так, чтобы он не мешал присоединению к таблице, с которой связан внешний ключ. В настоящее время я использую левые соединения.

Могу ли я использовать другое соединение или я могу сделать что-то подобное в своем запросе с использованием PHP?

if (table foreign key == NULL) 
{   
do not join table that foreign key points to 
}

else 
{   
join table using foreign key value 
}

Спасибо

Ответы [ 3 ]

1 голос
/ 01 августа 2011

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

select * from table1
inner join table2
on table1.pk = table2.fk
where {your conditions}

Для вашей схемы

select * from procedure
inner join dosage on dosage.dosage_id = procedure.dosage_id

Почему бы не иметь дело с вашим NULL сВместо CASE и вставьте вместо нее пустую строку?

SELECT *, CASE dosage_id
WHEN (dosage_id IS NULL) THEN ''
END
from procedure
inner join dosage on dosage.dosage_id = procedure.dosage_id

(примечание: я не лучший в CASE -;), надеюсь, это достаточно близко)

1 голос
/ 01 августа 2011

AFAIK Я думаю, что нет конкретного соединения, чтобы получить именно то, что вы хотите, поэтому вы должны использовать условие, подобное условию в вашем псевдокоде, чтобы получить это конкретное поведение.

Однако, ВЛЕВОВ этой ситуации JOIN будет просто замечательно: вам не нужно будет писать два отдельных запроса, и вам просто придется обрабатывать несколько значений NULL, если FK равен нулю.

1 голос
/ 01 августа 2011

Вы можете установить условие, что внешний: ключ не нулевой, я думаю (надеюсь, что я правильно понял):

SELECT * 
FROM
procedure
LEFT JOIN dosage ON dosage.dosage_id= procedure.dosage_id
WHERE 
dosage.dosage_id is not null

но я думаю, что это эквивалентно использованию внутреннего соединения

SELECT * 
FROM
procedure
INNER JOIN dosage ON dosage.dosage_id = procedure.dosage_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...