【问题标题】:SQL to select brand from a table, if another table has a product with that brandSQL 从一个表中选择品牌,如果另一个表有该品牌的产品
【发布时间】:2012-08-11 10:39:23
【问题描述】:

使用 MySQL 和 PHP。

我有两张表 products 和 stock。

产品有 { productID |产品 |品牌|}

股票有 { ID |商店ID |产品ID |数量 |价格}

我需要获取特定商店的所有品牌。

所以这就是我所拥有的不起作用。

SELECT DISTINCT brand 
  FROM products 
 WHERE 'products.productID' = 'stock.productID' 
   AND 'stock.storeID' = 1

如果我删除比较“WHERE”,它会返回所有品牌。

【问题讨论】:

  • 单引号仅用于字符串文字,而不是表或列名等标识符。您实际上是在要求数据库将单词“product.productID”与“stock.productID”进行比较,而不是任何表或列。不要将引号与“反引号”混淆。

标签: php mysql sql


【解决方案1】:

试试

Select p.brand FROM products p, stock s 
WHERE p.productID=s.productID and s.storeID='1'

【讨论】:

  • 这很好,只需要在 SELECT 之后添加 DISTINCT。
【解决方案2】:
SELECT DISTINCT p.brand 
FROM products p inner join stock s on p.productID=s.productID
WHERE `stock.storeID` = 1

标记`和'之间的差异

【讨论】:

  • 即使该列确实存在,我也会收到以下错误。 #1054 - 'where 子句'中的未知列 'stock.storeID'
  • -1 stock.storeID 应该是 stock.stockID。用两个反引号括起来,一个在表名周围,另一个在列名上,不在完整的 tablename.columnname 上(. 应该被排除)
【解决方案3】:

试试

 "SELECT p.* FROM Products p 
 INNER JOIN stock s USING(productID)
 WHERE s.storeID = '".(int)$givenID."' 
 GROUP BY p.brand";

【讨论】:

  • 请有礼貌地提及拒绝投票的原因,以便我知道我的错误。
【解决方案4】:

试试这个:

SELECT DISTINCT p.brand 
FROM   products p 
             INNER JOIN stock s 
                  ON p.productID=s.productID
WHERE s.`storeID` = 1

【讨论】:

    【解决方案5】:

    我们也可以这样写

    SELECT DISTINCT p.brand FROM products p , stock s where  p.productID=s.productID(+) and stock.storeID = 1
    

    【讨论】:

      【解决方案6】:

      这会有所帮助

      select p.brand 
        from product p, stock s 
       where p.productID = s.productID
         and s.storeID = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 2015-02-19
        • 2021-10-15
        • 1970-01-01
        • 2018-03-11
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多