在mysql的where子句中,"其中userID = SOME_VALUE;如果找不到SOME_VALUE - 选择0"。
如何?
我尝试了条件子选择,它有效,但相当复杂:
"SELECT * FROM table_descriptors
WHERE
tTable = :table_obj_table
AND approvalTable = :approval_table
AND (
CASE WHEN
IFNULL(( FIND_IN_SET( :user_id2,
( SELECT GROUP_CONCAT(userID) FROM table_descriptors
WHERE tTable = :table_obj_table2
AND approvalTable = :approval_table2
) ) ), 0) = 0
THEN userId = '0'
ELSE userId = :user_id
END
) LIMIT 1";
subselect group_concats用户id,如果在set中找不到用户id,则选择userId = 0.否则,选择当前用户id。 IFNULL将NULL转换为0,以防万一。
它有效,但还有其他的吗?#34; easy"没有"硬"子选择?
答案 0 :(得分:1)
如果我理解正确,当用户ID不存在时,您希望用户ID为0。如果是这样,您可以使用更简单的查询:
SELECT td.*
FROM table_descriptors td
WHERE td.tTable = :table_obj_table AND
td.approvalTable = :approval_table AND
td.userId IN (0, :user_id)
ORDER BY (td.userId = 0) DESC
LIMIT 1;