SQL查询(左联接+条件)在第一个条目上未显示正确的结果
我的SQL查询有问题。我试图查询数据库以从3个不同的表中获取数据,其中应用了一个表上的条件。 在第二个条目中,它正确地显示了结果,但在第一个条目中,它没有显示应用条件的表的结果 这是我的疑问:SQL查询(左联接+条件)在第一个条目上未显示正确的结果,sql,left-join,sql-limit,Sql,Left Join,Sql Limit,我的SQL查询有问题。我试图查询数据库以从3个不同的表中获取数据,其中应用了一个表上的条件。 在第二个条目中,它正确地显示了结果,但在第一个条目中,它没有显示应用条件的表的结果 这是我的疑问: SELECT `".PRODUCTS."`.*, `".CATEGORIES."`.*, `q_prices`.* FROM `".PRODUCTS."` LEFT JOIN `".CATEGORIES."` ON `".PRODUCTS."`.`categ
SELECT
`".PRODUCTS."`.*,
`".CATEGORIES."`.*,
`q_prices`.*
FROM
`".PRODUCTS."`
LEFT JOIN
`".CATEGORIES."`
ON
`".PRODUCTS."`.`category_id` = `".CATEGORIES."`.`category_id`
INNER JOIN(
SELECT
`".PRICES."`.*
MAX(`".PRICES."`.`price_modified`) modified
FROM
`".PRICES."`
GROUP BY
`".PRICES."`.`product_id`
) `q_prices`
ON
`".PRODUCTS."`.`product_id` = `q_prices`.`product_id`
这就是它的回报:
Array
(
[0] => stdClass Object
(
[product_id] => 1
[product_name] => Test product
[product_alias] => test-product
[category_id] => 1
[product_created] => 2013-07-29 11:36:51
[product_modified] => 2013-07-29 11:36:51
[category_name] => Test categorie
[category_alias] => test-categorie
[category_parent] => wonenplaza.nl
[category_created] => 2013-07-29 11:39:29
[category_modified] => 2013-07-29 11:39:29
[price_id] => 1
[price_amount] => 25.00
[price_tax] => 21
[price_created] => 2013-07-29 11:38:18
[price_modified] => 2013-07-29 11:38:18
[modified] => 2013-07-29 11:38:52
)
[1] => stdClass Object
(
[product_id] => 2
[product_name] => Priva Blue ID
[product_alias] => test-product2
[category_id] => 1
[product_created] => 2013-07-29 12:18:54
[product_modified] => 2013-07-29 12:18:54
[category_name] => Test categorie
[category_alias] => test-categorie
[category_parent] => wonenplaza.nl
[category_created] => 2013-07-29 11:39:29
[category_modified] => 2013-07-29 11:39:29
[price_id] => 4
[price_amount] => 20.00
[price_tax] => 21
[price_created] => 2013-07-29 12:19:11
[price_modified] => 2013-07-29 12:19:11
[modified] => 2013-07-29 13:30:05
)
)
我认为这与左连接查询中指定的限制有关,但我不确定这一点。我不知道如何查询数据库以获得这些结果
提前感谢:这是如何获取与最新值关联的其他数据
select f1, f2, etc
from sometables
join (
select f1, max(datefield) maxdt
from table1
where whatever
group by f1
) temp on table1.datefield = maxdt
and table1.f1 = temp.f1
etc
把这个原则应用到你的桌子上,你就可以开始了。顺便说一句,您需要的是一个内部联接,而不是派生表的左联接。您的子查询会查找所有价格中最新的,而不管产品是什么,这不是您所需要的。修复它并不简单,但您可以将嵌套查询重写为左连接,这似乎可以简化事情;很抱歉,您的表已稍微重命名,以使SQLfiddle满意 选择“.PRODUCTS.”、“.CATEGORIES.”、“.q\U prices.”* 来自`。产品` 左键连接“”类别` 关于`.PRODUCTS.`.category\u id`=`.CATEGORIES.`.category\u id`` 左键连接“价格”。“q_价格”` 在'q'U prices'上。'product\U id`=`.PRODUCTS.`.'product\U id`` 左键连接`。价格。``虚拟` 在`dummy`.`product\u id`=`.PRODUCTS.`.`product\u id`` 和'q_prices'。'price_modified'<'dummy'。'price_modified'` 其中`dummy`.`price_modified`为空;
.我可以问一下您上次加入时想要达到什么目的吗?查找每种商品的最新价格?是的,我想保留价格的历史记录,但在这个查询中,我试图获取产品的最新可用价格。没有DESC limit这样的东西。DESC与ORDER BY相关。您真的有没有没有没有产品ID的产品?在我看来,您试图加入一个字段products.product_ID,该字段的主键为空值。这将导致一个有效的category联接,但找不到这样的价格记录。我想第二张唱片就是你想要的。因此,要么将where product_ID不为null添加到where子句,要么修复数据,使其不为null(可能是空格)?存在于products.product_IDCorrect中,已更新第一篇文章。虽然我的问题仍然存在。谢谢Dan,我想这让我走得更远了!我更新了开篇文章,以匹配我现在代码中的内容。它显示了两种结果,但显示的顺序相反。我需要最新的价格,而不是最旧的。我不知道我是否正确理解了你的解决方案,你能回顾一下吗?你只做了部分。您使用产品id连接到派生表,但修改的价格不等于最大值。