【问题标题】:Mysql select data using multiple conditionsMysql使用多个条件选择数据
【发布时间】:2011-03-20 22:21:24
【问题描述】:

我有一张这样的桌子

id   fid
20    53
23    53
53    53

在这里,当我的条件类似于 .. where fid=53 and id in(20,23,53) 时,我需要返回 true 我还需要在....where fid=53 and id in(20,24,53) 时返回 false。 但上述条件不满足我的要求。两个查询返回相同的值(true)。请帮助我继续前进。

【问题讨论】:

  • 呃,这两个查询都有有效数据,这可能就是为什么你对这两个查询都正确...

标签: mysql sql-match-all


【解决方案1】:

我相信您的要求是让查询找到与所有值 20、23、53 关联的 fid,如果没有,则查询不会返回该 fid。

在 SQL 中有两种常见的解决方案。

首先是我为 MySQL 推荐的一个:

SELECT t1.fid
FROM mytable t1
JOIN mytable t2 ON t1.fid = t2.fid
JOIN mytable t3 ON t1.fid = t2.fid
WHERE (t1.id, t2.id, t3.id) = (20,23,53);

这是另一种使用 group by 而不是自连接的解决方案,但在 MySQL 中往往表现更差:

SELECT t.fid
FROM mytable t
WHERE t.id IN (20,23,53)
GROUP BY t.fid
HAVING COUNT(*) = 3;

【讨论】:

    【解决方案2】:

    可能是子查询?

    SELECT id, fid FROM table
    WHERE fid = 53 AND
    id IN ( SELECT id FROM table WHERE id IN(20,24,53))
    

    【讨论】:

      【解决方案3】:

      根据您的示例条件,单个查询是不可能的:(。 因为 where fid=53 and id in(20,23,53) 为 fid=53 和 id =20,53 返回 true 同样,where fid=53 and id in(20,24,53) 对于 fid=53 和 id =20,53 为 false

      唯一的区别在于 id=23 和 id=24。所以你可以用两个不同的查询来做到这一点。但有时它们会为相同的数据返回 true 和 false。

      我认为您需要再次考虑您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 2012-03-13
        • 2018-05-06
        • 2013-03-07
        相关资源
        最近更新 更多