MYSQL -连接查询有点麻烦/混乱



我试图把一个mysql查询,链接3个表在一起。实际上,这些表如下所示:

  1. products -包含产品信息和基本定价。
  2. product_depts -产品到不同部门的链接表。
  3. 促销-另一个链接表,根据产品id链接促销期间和价格。

这是查询:

SELECT p.id, `desc` , price1, price2, cost1, taxable, quantity, deptId, sale
FROM products p
INNER JOIN product_depts ON p.id = prodId
INNER JOIN promotions s ON p.id = s.id
WHERE MATCH (
`desc`
)
AGAINST (
'CLOVER'
IN BOOLEAN
MODE
)
ORDER BY `desc`
LIMIT 0 , 30

如果删除以下行:

INNER JOIN promotions s ON p.id = s.id

sale从select子句中取出,

结果是返回产品表中描述包含"CLOVER"的所有产品。

添加删除的查询部分后,只返回促销项(在促销表中具有匹配id)。在products表中包含"CLOVER"的其他非"促销"产品将被忽略。

由于我对mysql的了解非常有限,我想也许有人在这件事上有大量的知识来分享…我想提供一些输入。

正如我所理解的那样,这基本上与从product_depts表中调用deptId是一样的,它可以完美地工作。这让我很困惑。

我做错了什么,只显示"促销"的项目,而遗漏了其他结果?

谢谢!

INNER join基本上是说"检索所有在两个表中有匹配记录的记录"。

如果我正确地阅读了你的问题,听起来你想要的是一个左或右连接,这意味着"从一个表中检索所有记录,并且(如果有的话)从另一个表中匹配记录。

听起来你想获得所有的产品,不管他们是否有促销活动,但如果他们有促销活动,检索促销信息也

那将

SELECT ...
FROM products
INNER JOIN product_depts ON ...
LEFT JOIN promotions ON ...

所以…所有产品都必须有一个部门,所以对查询的特定部分执行内连接。促销上的左连接使'products'表成为left表,因此从该表中获取所有记录。促销表变成RIGHT表,只有在促销表中有匹配的记录时才为查询结果提供数据。

所以…给定两种产品,其中一种正在销售,你会得到

   product #1    department #1   promoinfo #1
   product #2    department #2   NULL

为结果。由于没有与#2产品匹配的促销信息,因此促销数据为NULL。

相关内容

  • 没有找到相关文章

最新更新