我试图将一个mysql查询放在一起,该查询将3个表连接在一起。从本质上讲,这些表格如下:
产品-包含产品信息和基本pricing.
的价格。
这是一个查询:
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.idsale从select子句中删除,
所发生的事情,是所有产品的描述包含“三叶草”,在产品表中,返回。
添加已删除的查询部件后,只返回正在升级的项(促销表中有匹配的id )。在products表中包含“三叶草”的任何附加产品,如果不是“正在促销”,都会被排除在外。
由于我对mysql的了解非常有限,我想也许有人在这件事上有很多知识可以分享……想提供一些这方面的投入。
不过,据我所知,这与从deptId表调用product_depts表本质上是一样的,后者工作非常完美。所以我很困惑。
我做错了什么,只显示“关于促销”的项目,而忽略了额外的结果?
谢谢!
发布于 2011-11-07 18:50:51
内部连接基本上说“在两个表中都有匹配记录的地方检索所有记录”。
如果我正确地阅读了你的问题,听起来你想要的是左或右连接,这意味着“从一个表中检索所有记录,如果有的话,从另一个表中匹配记录。
听起来你想得到所有的产品,无论他们有没有促销,但如果他们确实有一个推广,检索的宣传信息以及。
那会是
SELECT ...
FROM products
INNER JOIN product_depts ON ...
LEFT JOIN promotions ON ...所以..。所有产品都必须有一个部门,因此对查询的特定部分进行内部连接。在促销活动上的左联接使“products”表成为左边的表,因此从该表中获取所有记录。升级表成为正确的表,并且只有当促销表中有匹配的记录时,才为查询结果提供数据。
所以..。如果有两种产品,其中一种正在打折,你就会得到
product #1 department #1 promoinfo #1
product #2 department #2 NULL为了结果。由于#2产品没有匹配的宣传信息,所以对于promo数据,您将获得NULL。
https://stackoverflow.com/questions/8041039
复制相似问题