从ID表中选择2表SQL WHERE子句

时间:2014-05-25 06:31:50

标签: mysql sql where

我在MySQL中有2个表,在这两个表中我都有merchant_id,商家,分支和其他一些字段,一个表的名称是商家,另一个表是产品。

tbl_merchant:

    id   |  merchant_id  |   merchant_name    |    branch      |   ...
   ------+---------------+--------------------+----------------+
    1    | 1001          |  McDonalds         |  branch 1 mcd  |   ...
    2    | 2002          |  KFC               |  branch 1 kfc  |   ...

tbl_product:

    id   |  product_id   |  product_name   |  price  | merchant_id
   ------+---------------+-----------------+---------+-------------
    1    | 100101        |  Chicken        | 10      | 1001
    2    | 100102        |  Potato         | 5       | 1001
    3    | 100101        |  Burger         | 10      | 2002
    4    | 100102        |  Fish Fillet    | 10      | 2002

我想知道如何使用产品_id = 100101和merchant_id = 1001的SQL WHERE子句显示merchant_name,从两个表中分支?

像这样:

   Result :
    id   |  merchant   |  branch        |  product_name | price
   ------+-------------+----------------+---------------+-------
    1    | McDonalds   |  branch 1 mcd  |  Chicken      | 10

谢谢

4 个答案:

答案 0 :(得分:0)

试试这个:

select * from marchant join product on marchant.id=product.merchant_id where merchant_id = 1001

此声明将两个表连接在一起,其中主键形式商家等于产品中的merchant_id。

答案 1 :(得分:0)

首先,我将向您展示查询,然后我会逐行解释每个部分,以帮助您理解:

SELECT
   merchant_name, branch
FROM
   tbl_merchant INNER JOIN tbl_product ON (tbl_product.merchant_id = tbl_merchant.merchant_id)
WHERE
   product_id = 100101 AND merchant_id = 1001

好的,所以如果我们看一下select之后的第一部分,应该很清楚将要打印出的两列是merchant_name和branch。根据您的输出,您可以通过将其名称添加到列表中来打印任一表中的任何字段。如果该字段在两个表中都具有相同的名称,那么您需要对其进行限定:

SELECT
  tbl_merchant.id, tbl_product.id
FROM
  tbl_merchant INNER JOIN tbl_product USING(merchant_id)

此查询的棘手部分是将两个表连接在一起的行。基本上你现在拥有的是两个由商家ID链接在一起的表格,这是有道理的,因为1个商家可以拥有许多产品(即1对多的关系)。我假设商家ID是唯一的。然后,连接将具有相同merchant_id的所有行组合在一起(在其中一个表中是唯一的,因此保证是正确的)。更具体地说,您可以将其视为合格的交叉产品,其中来自tbl_product的每个元组与来自tbl_merchant的每个元组连接,然后根据条件tbl_product.merchant_id = tbl_merchant.merchant_id进行限定。

查询的最后一部分(WHERE子句)根据提供的条件简单地删除行。

答案 2 :(得分:0)

对此的查询是:

SELECT merchant_name,branch 从    tbl_merchant  内部联接  tbl_product  ON(tbl_product.merchant_id = tbl_merchant.merchant_id) 哪里    product_id = 100101 AND merchant_id = 1001

答案 3 :(得分:0)

SELECT merchants.id, merchants.merchant_id, merchants.branch, products.product_name, products.price 
FROM merchants 
INNER JOIN products ON products.merchant_id = merchants.merchant_id 
WHERE merchants.merchant_id = 1001 AND products.product_id = 100101

您可以使用JOIN来解决此类查询

有一些很好的文章可以通过visula解释来了解更多关于JOIN的信息::

1)http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/" SQL连接的可视化解释"

2)http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins" SQL连接的可视化表示"