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

09-12 16:01