【发布时间】:2014-01-01 18:59:20
【问题描述】:
我有以下查询,我认为 SQL CASE 语句在这里不起作用。我想从表中选择一个字段,如果查询中的一个条件为真,则条件基于不同的列。我认为使用 case 并不能解决问题,因为 CASE 会检查特定列中的值。
我可以创建两个单独的查询来完成这个任务,是否可以用一个语句来完成?
查询:
SELECT
c.Conversation_ID, c.Title, c.Date, u.Name,
(SELECT
COUNT(*)
FROM
conversation_message
WHERE
Conversation_ID = c.Conversation_ID) as Total
FROM
conversation c, user u
WHERE
c.User_ID = ?
OR c.With_User_ID = ?
AND u.User_ID=c.With_User_ID
在当前场景中,名称始终为 With_User_ID,我想要的是如果 c.User_ID 为真,则 u.User_ID = c.With_User_ID 应执行,否则如果 c.With_User_ID 为真,则 u.User_ID = c.User_ID应该被执行。
【问题讨论】:
-
这看起来像是一场等待发生的灾难。为什么不编写两个不同的查询并依赖应用层中的布尔逻辑?
-
@Woot4Moo 我不知道这是不是好习惯?
-
如果有什么好的做法?
-
对同一个任务进行两个单独的查询,如果可以用一个查询来实现的话
-
@MohammadAreebSiddiqui 好帖子,充其量只是轶事,但需要注意的是,一次往返优于几次往返。
标签: mysql sql database mysqli prepared-statement