Mysql 按ID从2个表SQL WHERE子句中选择

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

我在MySQL中有两个表,在这两个表中我都有merchant_id、merchant、branch和一些其他字段,一个表的名称是merchant,另一个表的名称是product

tbl_商户:

    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,可能或不可能。谢谢您感谢您的参考网站