mysql,使用if
我有一个sql查询: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 您还可以在
...
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
。