【问题标题】:double "and" SQL query双“和” SQL 查询
【发布时间】:2015-10-26 04:20:57
【问题描述】:

我正在处理下表的 SQL 查询:

product_id | type | value
1 | gender  | female
1   | age   |  1-10
2   | gender    | female
2 | age |  1-10
3   | gender    | male
3 | age  | 11-20
4   | gender     | female
4   | age    | 11-20
5   | gender    | male
5   | age   | 1-10

一个产品(不同的表,product_id 是外键)具有性别或年龄类型的属性。对于性别 = 女性和年龄 = 1-10 的情况,我想获得不同的产品 ID。

我尝试了以下查询:

SELECT distinct product_id 
FROM Attributes 
WHERE (type = "gender" and value  ="female") 
  and (type = "age" and value = "1-10")

我希望能取回产品 ID 1 和 2。但是我什么也得不到。

知道我做错了什么吗?

【问题讨论】:

  • 您使用的是哪个 DBMS? "female" 表示标准 SQL 中的列名,而不是字符串文字。

标签: sql sqlalchemy


【解决方案1】:

它不起作用的原因是没有行同时具有 Gender 类型和 Age 类型。我会使用子查询。

SELECT DISTINCT product_id FROM Attributes WHERE (type = "age" and value ="1-10") 

AND product_ID IN (

SELECT distinct product_id FROM Attributes WHERE (type = "gender" and value ="female"))

【讨论】:

    【解决方案2】:

    我不认为示例表中的任何东西都是

    (type = "gender" and value ="female") and (type = "age" and value = "1-10")
    

    我认为子选择的内部连接可能会起作用:

    SELECT DISTINCT A.product_id 
    FROM Attributes A 
    INNER JOIN A.product_id = B.product_id
      (
        SELECT product_id 
        FROM Attributes 
        WHERE (type = "age" and value = "1-10") 
      ) B
    
    WHERE (A.type = "gender" and A.value ="female") 
    

    这应该是一个不同产品 ID 的列表,其中性别为女性,年龄为“1-10”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2021-10-12
      • 2013-09-26
      • 2012-04-20
      相关资源
      最近更新 更多