【问题标题】:MySQL: check if a column has values based on another columnMySQL:检查一列是否具有基于另一列的值
【发布时间】:2018-09-17 07:07:24
【问题描述】:

我正在使用PDO 来处理我的数据库并且我有一个表:

Table:
id    sku    category
1     XYZ    Ballerinas
2            Ballerinas
3            Ballerinas
4     ABC    Ballerinas

如您所见,我有4 行属于同一类别Ballerinas,但其中两个没有sku。仅当 all Ballerinassku 时,我如何才能使用 PDO 查询返回这些行?

谢谢! :D

【问题讨论】:

  • 那些行有null 值还是空值?该列的默认值是多少?
  • 那些列有空字符串sku = ''
  • where sku is not null and trim(sku) <> ''

标签: mysql


【解决方案1】:

查找匹配类别的一个选项是按类别聚合,然后断言总计数与 空字符串的sku 值的计数相匹配。如果这两个计数匹配,则保留该类别。

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT category
    FROM yourTable
    GROUP BY category
    HAVING COUNT(*) = COUNT(CASE WHEN sku <> '' THEN 1 END)
) t2
    ON t1.category = t2.category;

Demo

【讨论】:

  • 嘿@TimBiegeleisen,这是完美的,它正是我需要的! :D 谢谢你! :D
  • 是的@TimBiegeleisen,这个答案解决了我的问题,我只需要等待 10 分钟才能标记它:D。再次感谢你! :D
【解决方案2】:

或者你也可以不加入:

SELECT *
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1 FROM Table1 t2 WHERE t1.category = t2.category AND t2.sku IS NULL);

如果您将空值 ('') 也视为“不是一个值”,那么 exists 子句中的条件应该是

where t2.category=t1.category and not t2.SKU>''

【讨论】:

  • 在外部查询的列列表中,您不需要指定表别名 (t1.),因为只有一个表可用于输出。
  • 谢谢@cars10m,我已经使用了蒂姆的答案,但这一个也可以:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
相关资源
最近更新 更多