【问题标题】:Selecting from database, based on condition on different columns根据不同列的条件从数据库中选择
【发布时间】: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


【解决方案1】:

您是否尝试过在where 子句中嵌套条件?

例如:

WHERE
    (c.User_ID = ? AND u.User_ID = c.With_User_ID)
    OR (c.With_User_ID = ? AND u.User_ID = c.User_ID)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2014-11-26
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多