【问题标题】:Sql select multiple values from another querySql从另一个查询中选择多个值
【发布时间】:2012-12-01 01:37:16
【问题描述】:

我在 php-mysql 中有三个表 products,product_fact,fact 架构是这样的

产品

 id , name (1000 records)

例如-

id     |    name
-------+--------
1125   | key chain
1135   | bikes
1145   | cars

id = 产品的id号不同,每个产品都有唯一的id,

名称 = 产品名称

product_fact

product_id, fact_id

product_id = 这与 products 表中的 id 相同

fact_id = 这是每个产品都有一些事实的事实 ID,许多产品有不止一个事实。

例如-

product_id  |  fact_id
------------+----------
1125        |      5
1125        |      7
1125        |      6
1135        |      8
1145        |      9
1145        |      2

事实

id , name

id = 这与表 product_fact 中的 fact_id 相同

name = 这是事实的名称。

例如-

id      |    name
--------+---------
 2      |   black
 8      |   free
 5      |   sold
 6      |   coming soon
 9      |   new

现在我想选择与产品相关的特定事实名称,但是当我执行此查询时 -->

SELECT name
FROM fact
Where id = (SELECT fact_id
FROM product_fact
Where product_id='1125');

它说子查询返回超过 1 行

但是当我运行这个查询时 -->

SELECT name
FROM fact
Where id = (SELECT fact_id
FROM product_fact
Where product_id='1135');

它给了我正确的输出:free

我现在应该做什么它应该显示其他产品的事实名称任何帮助, 我还应该在我的查询中包含什么......任何帮助

【问题讨论】:

    标签: php mysql sql database


    【解决方案1】:

    为了更安全地使用子查询,请使用 IN 而不是 =

    SELECT name 
    FROM   fact 
    Where id IN (SELECT fact_id 
                 FROM   product_fact 
                 WHERE  product_id='1125');
    

    或使用JOIN

    SELECT  DISTINCT a.name
    FROM    fact a
            INNER JOIN product_fact b
                ON a.ID = b.fact_ID
    WHERE   b.product_ID = '1125'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多