如果使用mysql在sql上使用

时间:2018-03-14 09:29:19

标签: mysql sql

如果在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)

1 个答案:

答案 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