可以使用哪种连接或查询方法? MYSQL快速问题?

时间:2011-08-01 15:22:43

标签: php mysql codeigniter activerecord

非常快速的问题!

如果表FK具有空值,那么我可以设计我的查询,以便它不会加入外键与之关联的表。我目前正在使用Left Joins。

我可以使用其他连接吗?或者我可以在使用PHP的查询中执行类似的操作吗?

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

else 
{   
join table using foreign key value 
}

由于

3 个答案:

答案 0 :(得分:1)

你可以设置外语:key不为null的子句我想(希望我理解正确):

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

答案 1 :(得分:1)

你可以张贴你的桌子和钥匙名字吗?然后我们可以编写查询 - 我认为它需要是一个内连接来避免空值。

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

为什么不用CASE语句处理NULL并改为推送空字符串?

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

(注意:我不是最好的CASE - ;)希望能让你足够近)

答案 2 :(得分:1)

AFAIK我认为没有特定的连接可以准确地获得你想要的东西,所以你必须使用伪代码中的条件来获得这种特定的行为。

然而,LEFT JOIN在这种情况下会很好:你不必编写两个单独的查询,如果FK为null,你只需要处理一堆NULL值。