0

我有下表:

| 编号 | 产品编号 | 价格 | 集团 |
| 1 | 123123 | 100 | 1 |
| 2 | 123123 | 200 | d845f |
| 3 | 91123 | 150 | 1 |
| 4 | 2131238 | 100 | 1 |
| 4 | 5678689 | 250 | 1 |

所以我想选择 group 所在的所有价格IN (1, 'd845f')。对于其中一些只有一行输出,例如

| 3 | 91123 | 150 | 1 |

但对于某些人来说,有两行:

| 1 | 123123 | 100 | 1 |
| 2 | 123123 | 200 | d845f |

我用类似的东西进行选择

SELECT * FROM table WHERE `group` IN (1, 'd845f') 

where1d845f是我在 PHP 中指定的设置参数。
所以总是有一行group = 1,但可以选择第二行,就像上面的例子一样,'d845f'我的 IN 选项中的 group 。
因此,当我有两行时,我希望 MySQL 只显示其中之一:带有'd845f'.
那么我该怎么做呢?
我想获得所有带有group = 1参数的产品,但是当group = 'd845f'我只想获得一行时: with group = 'd845f'
我也想在没有嵌套 SELECT 的情况下这样做(允许加入)。谢谢!

4

4 回答 4

0

如果我正确理解了您的问题,您需要检查 product_id 中是否有一个包含 d845f 的组,如果有,请使用它而不是 1 的组。

这应该有效:

SELECT T.*
FROM TableName T
  JOIN (
    SELECT Product_Id, 
      MAX(IF(`GROUP`='d845f','d845f','1')) whichGroup
    FROM TableName T
    WHERE   `GROUP` IN ('1','d845f')
    GROUP BY Product_ID
    ) T2 ON 
      T.Product_Id = T2.Product_Id AND T.`GROUP` = T2.whichGroup

使用检查来查看该特定产品是否存在记录MAXIF然后将这些结果加入原始表中。

SQL Fiddle 演示(借用以前的海报)

于 2013-04-01T16:00:54.923 回答
0

这个问题叫做Relational Division.

SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  product_ID
            FROM    tableName
            WHERE   `GROUP` IN ('1','d845f')
            GROUP   BY product_ID
            HAVING  COUNT(DISTINCT `GROUP`) = 2
        ) b ON a.product_ID = b.product_ID

输出

╔════╦════════════╦═══════╦═══════╗
║ ID ║ PRODUCT_ID ║ PRICE ║ GROUP ║
╠════╬════════════╬═══════╬═══════╣
║  1 ║     123123 ║   100 ║ 1     ║
║  2 ║     123123 ║   200 ║ d845f ║
╚════╩════════════╩═══════╩═══════╝
于 2013-04-01T15:45:15.813 回答
-1

您可以使用带有 LIMIT 的 CASE 语句

SELECT group, product_id, price, id
FROM table 
WHERE group IN (1, 'd845f')
ORDER BY CASE WHEN group = 'd845f' THEN 0 ELSE 1 END
LIMIT 1
于 2013-04-01T15:44:46.133 回答
-1

这是一个简单的

SELECT
  a.id,
  a.product_id,
  a.price,
  a.`group`
FROM
  tablename a
  LEFT JOIN tablename b ON ( a.product_id = b.product_id
                       AND a.`group` <> b.`group` )
WHERE
  b.`group` IS NULL 
  OR length(a.`group`) > length(b.`group`)

注意:我没有添加组存在的条件,d845f因为我怀疑可能有 2 条相同的记录product_id具有不同的组。查询获取组中最大的行值

于 2013-04-01T16:45:41.950 回答