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

标签 mysql sql where-clause

我在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/

相关文章:

php - 限制mysql中OR的每个标签

mysql - where子句中的子查询(mysql)

MYSQL 通过 URL 选择

mysql - #1022 - 不会写;表中的重复键

jquery - codeigniter 文本框 id 中的 jquery 自动完成功能不起作用

sql - 如何在 where 子句中过滤 select 语句中包含 count/distinct/case/when 的列

python-3.x - 根据匹配值从其他数据框中复制列

Mysql 两表一致性检查

java - WSO2 API Manager 1.8 和 WSO2 BAM 2.5 - 集群环境

mysql - 从具有 2 级子项的一个表中计算总行数