SELECT name
FROM test.projectusermap p
WHERE projectid IN(
IF(1 = 1, (
SELECT ProjectId
FROM test.projectusermap
), (
SELECT ProjectId
FROM test.projectusermap
WHERE name = 'ravi'
))
)
答案 0 :(得分:0)
你需要这样的东西
SELECT name
FROM test.projectusermap p
WHERE projectid IN(SELECT ProjectId
FROM test.projectusermap
WHERE ( 1 = 1 ) /*I assume this boolean condition
is just a placeholder for testing
and won't always be this*/
OR name = 'ravi')
答案 1 :(得分:0)
我看到的第一个问题是IF 1=1
然后它将是查询A的结果,查询A没有WHERE子句,所以它将返回Project表中的所有ProjectID。
否则它将返回'ravi'的项目ID,假设Ravi只有一个项目ID,它是该表的主键。
我认为您可以通过在查询A中放置WHERE子句来解决整个返回多行问题。
你的IF 1=1
是在说ProjectID IN('1'),但你的子查询没有看到。在子查询之前,无论您的IF语句如何,因为子查询独立于您的初始WHERE子句和条件IF语句,您需要告诉查询A只返回ProjectID 1,其中ProjectID = 1,而不管您的IF语句是什么。
SELECT name
FROM test.projectusermap
WHERE projectid IN(
IF(1 = 1, (
SELECT ProjectId
FROM test.projectusermap WHERE ProjectID = 1
), (
SELECT ProjectId
FROM test.projectusermap
WHERE name = 'ravi'
))
)
另外,在projectusermap上取出了Alias,因为你没有将它与sub_query一起使用。
另一种说法是。
SELECT name FROM test.projectusermap WHERE projectID IN (SELECT ProjectID from test.projectusermap WHERE (1=1 or Name = Ravi) order by 1)
答案 2 :(得分:-1)
我认为JOIN
可能会更好
SELECT name
FROM test.projectusermap p
JOIN test.projectusermap p2 ON p.projectid = p2.ProjectId
WHERE p2.name = 'ravi'