MYSQL 从多个表中提取多个值

标签 mysql database many-to-many

请原谅我的标题选错了,我不知道该给这个问题贴上什么标签,但相信我可以解释一下。

我在产品表和商店表之间建立了多对多关系。

table name: products
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(200)     | NO   |     | NULL    |                |
| sku   | varchar(10)      | NO   |     | NULL    |                |
| units | int(5)           | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

table name: stores
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| number   | int(5)           | NO   |     | NULL    |                |
| location | varchar(50)      | NO   |     | NULL    |                |
| phone    | varchar(10)      | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+


table name: products_stores
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| pID   | int(10) unsigned | NO   | PRI | NULL    |       |
| sID   | int(10) unsigned | NO   | PRI | NULL    |       |
+-------+------------------+------+-----+---------+-------+

我正在运行一个查询以显示其 ID = 1 的商店中所有可用的产品

SELECT p.name, p.sku 
FROM products p 
  INNER JOIN products_stores ps
    ON p.id = ps.pID 
WHERE ps.sID = 1;

我对这个查询没有问题,并得到了我想要的结果。但是,在我的显示结果中,我还想显示每个结果行的商店位置值。我认为我可以在我的 FROM 语句中将它以逗号分隔,例如:

SELECT p.name, p.sku, s.location
FROM products p, stores s
  INNER JOIN products_stores ps
    ON p.id = ps.pID
WHERE ps.sID = 1;

但是这不起作用。我相信答案很简单,我会继续研究解决方案。我想我会抛出这个,希望有人能引导我朝着正确的方向前进。

谢谢。

最佳答案

使用显式 JOIN,隐式 JOIN 已弃用(并且不太清楚)

SELECT p.name, p.sku ,s.location
FROM products p 
  INNER JOIN products_stores ps
    ON p.id = ps.pID 
INNER JOIN stores s
ON s.ID=ps.sID
WHERE ps.sID = 1;

关于MYSQL 从多个表中提取多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27856141/

相关文章:

mysql - 如何从同一个表运行多个限制为 0, 1 的选择查询并合并所有结果

php - 函数里面没有选择数据库,用PDO怎么解决?

sql - 是否可以返回 WHERE IN 查询的缺失值

mysql - 基于公共(public)标签搜索相关项目的算法

java - 无法在 Spring Boot 中插入多对多关系的记录

mysql - 根据另一个表中记录的存在向 select 语句添加一列

mysql - SQL 左连接 : how to return the newest from tableB and grouped by another field

sql-server - 如何优化SQL表点对点距离数据的读取速度

django - 如何为 manytomanyfield 设置默认值

php - Laravel 5 Session_driver 数据库 token 不匹配