我在MySQL中有2个表,在这两个表中我都有merchant_id、merchant、branch和其他一些字段,一个表的名称是merchant,另一个表是product。
tbl_merchant:
id | merchant_id | merchant_name | branch | ...
------+---------------+--------------------+----------------+
1 | 1001 | McDonalds | branch 1 mcd | ...
2 | 2002 | KFC | branch 1 kfc | ...
tbl_产品:
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
我想知道如何使用 SQL WHERE 子句按product_id = 100101 和merchant_id = 1001 显示商家名称和分支?
像这样:
Result :
id | merchant | branch | product_name | price
------+-------------+----------------+---------------+-------
1 | McDonalds | branch 1 mcd | Chicken | 10
谢谢
最佳答案
首先,我将向您展示查询,然后我将逐行解释每个部分以帮助您理解:
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
好吧,如果我们看一下选择后的第一部分,应该很清楚将打印出的两列是merchant_name 和branch。根据您的输出,您只需将其名称添加到列表中即可打印出任一表中的任何字段。如果该字段在两个表中具有相同的名称,那么您需要像这样限定它:
SELECT
tbl_merchant.id, tbl_product.id
FROM
tbl_merchant INNER JOIN tbl_product USING(merchant_id)
此查询的棘手部分是将两个表连接在一起的行。本质上,您现在拥有的是通过商家 ID 连接在一起的两个表,这是有道理的,因为 1 个商家可以拥有许多产品(即一对多关系)。我假设商家 ID 是唯一的。然后,该连接将具有相同 Mercury_id 的所有行配对在一起(该 ID 在其中一个表中是唯一的,因此保证是正确的)。更具体地说,您可以将其视为合格的叉积,其中 tbl_product 中的每个元组与 tbl_merchant 中的每个元组连接,然后根据条件 tbl_product.merchant_id = tbl_merchant.merchant_id 进行合格。
查询的最后一部分(WHERE 子句)只是根据提供的条件删除行。
关于mysql - 按 ID 从 2 个表中选择 SQL WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23852674/