使用mysql的sql上的if-else

使用mysql的sql上的if-else,mysql,sql,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 , mou

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

通过使用纯逻辑运算符,可以在不太复杂的情况下执行此操作:

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)
)
请注意,您还可以在
左联接上使用
内部联接
,以排除未满足联接条件的结果


关于最佳实践的进一步说明:如果您在连接表时选择所有列(
SELECT*
),您将很快发现自己拥有大量数据,最好将
SELECT
限制为仅需要的列,并使用显式表标识符,例如
SELECT m.id\u art,m.id_Fourniseur

今天的提示:切换到现代的显式
JOIN
语法。更容易编写(无错误),更容易阅读(和维护),并且更容易转换为外部连接,如果需要的话,你应该提供示例数据和期望的结果。这个答案是正确的,但是记住要考虑空值(应该进入“false”一边)。
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)