如果在sql上if 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)
答案 0 :(得分:1)
通过使用纯逻辑运算符,可以在没有太多复杂性的情况下完成此任务:
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
。