【问题标题】:MySQL SELECT - Same record must match more valuesMySQL SELECT - 相同的记录必须匹配更多的值
【发布时间】:2015-09-21 22:30:32
【问题描述】:

我有一个表 prices 有 4 列(idprice1price2date) 一些解释:

  • id 未设置为自动递增,并且可以有许多相同的 ID 值(即 Id 123 可以存在 5 次但具有不同的参数)。
  • price1 和 price2 是两个十进制值,将 price1 存储为起始价格,将 price2 存储为最终价格
  • date 是 VARCHAR (15) 并将价格日期存储在代码中(如“J2015”——2015 年 1 月),并且是使用它的应用的某种 ID。

对 i.E. 的普通查询select Id、price1 和 price2 与查询一起使用

SELECT `id`, `price1`, `price2` 
FROM `prices` 
WHERE `price1` = '1.23' AND `price='3.45' AND `date`='J2015'

但后来一位客户想要扩展搜索。他想要所有符合以下条件的 ID(例如:)

price1 = '1.50' AND price2 = '1.75' AND date = 'AP2013'
还有
price1 = '1.39' AND price2 = '1.45' AND date = 'MAY2013'

起初我想使用 IN 参数,但那会/可能返回不正确的数据。所以我被困在这一点上。

【问题讨论】:

  • @Mihai 这将返回匹配任一条件的 ID,而不仅仅是同时匹配两个条件的 ID。

标签: mysql mysqli


【解决方案1】:

使用自联接

SELECT p1.id
FROM prices AS p1
JOIN prices AS p2 ON p1.id = p2.id
WHERE p1.price1 = '1.50' AND p1.price2 = '1.75' AND p1.date = 'AP2013'
AND p2.price1 = '1.39' AND p2.price2 = '1.45' AND p2.date = 'MAY2013'

【讨论】:

  • 谢谢!试用此代码后,一切正常。
【解决方案2】:

这可以工作:

SELECT id 
FROM prices
WHERE id IN (SELECT id FROM prices WHERE price1 = '1.50' AND price2 = '1.75' AND date = 'AP2013')
AND (price1 = '1.39' AND price2 = '1.45' AND date = 'MAY2013'); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2016-05-13
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多