mysql,使用if

mysql,使用if,sql,mysql,Sql,Mysql,我有一个sql查询: ... LEFT JOIN users ON users.id = mod.id and mod.level = 1 ... 但是如果没有找到mod.level=1的任何结果,我希望搜索mod.data>1(users.id=mod.id和mod.data>1)您可以将and切换到WHERE并使用OR函数: LEFT JOIN users ON users.id = mod.id WHERE mod.level = 1 OR mod.data > 1 您还可以在

我有一个sql查询:

...
LEFT JOIN users ON
users.id = mod.id and mod.level = 1
...

但是如果没有找到mod.level=1的任何结果,我希望搜索mod.data>1(users.id=mod.id和mod.data>1)

您可以将and切换到WHERE并使用OR函数:

LEFT JOIN users ON
users.id = mod.id 
WHERE mod.level = 1
OR mod.data > 1

您还可以在
JOIN
上进行如下筛选:

LEFT JOIN users ON users.id = mod.id AND (mod.level = 1 OR mod.data > 1)
select *
from MyTable m
left outer join (
    select id
    from MyTable
    where level = 1
) ml on m.id = ml.id
left outer join users u on m.id = u.id
    and (u.id = m1.id or (m1.id is null and m.level > 1))

试着这样做:

LEFT JOIN users ON users.id = mod.id AND (mod.level = 1 OR mod.data > 1)
select *
from MyTable m
left outer join (
    select id
    from MyTable
    where level = 1
) ml on m.id = ml.id
left outer join users u on m.id = u.id
    and (u.id = m1.id or (m1.id is null and m.level > 1))

它可能很慢,但联接返回适合任何一种情况的所有行。然后使用where子句过滤掉不需要的行

Select *
From 
  LEFT JOIN users ON users.id = mod.id AND (mod.level = 1 OR mod.data > 1) 
Where
  Case
    When mod.level = 1 then 1 
    When Not Exists(Select 1 from users Where users.id = mod.id and mod.level=1) 
      AND mod.data > 1 then 1
    Else 0 END = 1;
也许用一个新的

这将获取mod.level为1或mod.data大于1的行,但不会同时获取level为1且data大于1的行

如果您只想在mod.level不是1时查看mod.data,请使用以下条件:

...
WHERE mod.level = 1
   OR (mod.level != 1
  AND mod.data > 1)
...

如果您需要mod.level=1或mod.data>1,请在users.id=mod.id,其中mod.level=1或mod.data>1上使用
LEFT-JOIN-users。但这将包括
mod.data>1
行,即使存在一些
mod.level=1
行。这更容易编写
其中modl.level>=1
,但这将返回
mod.level=1
mod.data>1
的行。如果没有
mod.level=1
的行,OP似乎只需要
mod.data>1
的行。这更容易编写
modl.level>=1
,但这将返回
mod.level=1
mod.data>1
的行。如果没有
mod.level=1
的行,OP似乎只需要
mod.data>1
的行。我认为这不是您所期望的方式。XOR不会同时检查多行,我认为这是OP需要的。第二个示例更简单地写为
,其中mod.level>=1
。在
之后缺少表名。此外,
和(mod.level=1或mod.data>1)
更简单地写为
和mod.level>=1