如果在SQL上执行else语句,该怎么办?我要执行此查询。
SELECT *
FROM mouvements,
articles,
clients,
fournisseurs
WHERE mouvements.id_art = articles.id_art
AND IF(mouvements.type_mouv = "true",
mouvements.id_fournisseur = fournisseurs.id ,
mouvements.id_client = clients.id_cli)
最佳答案
通过使用纯逻辑运算符,可以在没有太多复杂性的情况下执行此操作:
SELECT *
FROM mouvements,
articles,
clients,
fournisseurs
WHERE mouvements.id_art = articles.id_art
AND (
(mouvements.type_mouv = "true" AND mouvements.id_fournisseur = fournisseurs.id)
OR (mouvements.type_mouv <> "true" AND mouvements.id_client = clients.id_cli)
)
但是,通常最好的做法是像这样使用显式
JOIN
:SELECT *
FROM mouvements m
LEFT JOIN articles a ON (m.id_art = a.id_art)
LEFT JOIN clients c ON (m.type_mouv <> "true" AND m.id_client = c.id_clie)
LEFT JOIN fournisseurs f ON (m.type_mouv = "true" AND m.id_fournisseur = f.id)
请注意,您还可以在
INNER JOIN
上使用LEFT JOIN
排除不满足联接条件的结果。有关最佳做法的进一步说明:如果在连接表时选择所有列(
SELECT *
),则会很快发现自己拥有大量数据,为了维护和提高性能,最好将SELECT
限制为仅列您需要使用显式表标识符,例如SELECT m.id_art, m.id_fournisseur
。