Mysql 按ID从2个表SQL WHERE子句中选择
我在MySQL中有两个表,在这两个表中我都有merchant_id、merchant、branch和一些其他字段,一个表的名称是merchant,另一个表的名称是product tbl_商户:Mysql 按ID从2个表SQL WHERE子句中选择,mysql,sql,where,Mysql,Sql,Where,我在MySQL中有两个表,在这两个表中我都有merchant_id、merchant、branch和一些其他字段,一个表的名称是merchant,另一个表的名称是product tbl_商户: id | merchant_id | merchant_name | branch | ... ------+---------------+--------------------+----------------+ 1 | 1001
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
我想知道如何通过product_id=100101和merchant_id=1001使用SQLWHERE子句显示merchant_name和branch这两个表
像这样:
Result :
id | merchant | branch | product_name | price
------+-------------+----------------+---------------+-------
1 | McDonalds | branch 1 mcd | Chicken | 10
谢谢试试这个:
select * from marchant join product on marchant.id=product.merchant_id where merchant_id = 1001
此语句将两个表连接在一起,其中主键表单merchant等于产品中的merchant\u id。首先,我将向您展示查询,然后我将逐行解释每个部分,以帮助您理解:
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对多关系)。我假设商户ID是唯一的。然后,联接将具有相同商户id(在其中一个表中是唯一的,因此保证是正确的)的所有行配对在一起。更具体地说,您可以将其视为一个合格的交叉产品,其中tbl_产品的每个元组与tbl_merchant的每个元组连接,然后根据条件tbl_product.merchant_id=tbl_merchant.merchant_id进行合格
查询的最后一部分(WHERE子句)只是根据提供的条件删除行。对此的查询是:
选择商户名称、分支机构
从…起
tbl_商户
内连接
tbl_产品
ON(tbl_产品.商户id=tbl_商户.商户id)
哪里
product_id=100101和merchant_id=1001选择merchants.id、merchants.merchant_id、merchants.branch、products.product_name、products.price
商人
products.merchant\u id=merchants.merchant\u id上的内部联接产品
其中,merchants.merchant\u id=1001和products.product\u id=100101
您可以使用JOIN来解决这种类型的查询
有一些好文章可以学习更多关于加入visula解释的内容:
1) “SQL联接的直观解释”
2) “SQL联接的可视化表示”Ahem、
where和
?我认为你在这两个关键词之间遗漏了一些东西。请简要解释你的答案,以便对OP和其他读者更有用。请帮助。。如果我在tbl_交易中有商户id和产品id,如何使用Where子句仅按客户id显示商户名称和产品名称,我尝试修改您的代码,但我遇到一些错误,如alias。谢谢,现在我完全理解了你所说的唯一性,我为每个商户id中的产品id创建了语法和工作if unique:“选择*从tbl\U交易内部加入tbl\U商户在tbl\U交易上。商户id=tbl\U商户。商户id内部加入tbl\U产品在tbl\U交易上。产品id=tbl\U产品id,其中客户id=001”但如果我在另一个商户id上有相同的产品id,我会得到重复的结果。如果我想选择类别id,可能或不可能。谢谢您感谢您的参考网站