【发布时间】:2012-01-30 09:41:00
【问题描述】:
我有一个查询,它应该从每个 backend_hotels_id date_start 和 package_supplier 中选择最低的 price_per_pax_after_tax,这似乎在我添加 WHERE 子句之前有效。
这是查询:
SELECT e.price_per_pax_after_tax, e.hotel_score, e.package_id, e.package_type
FROM packages_sorted_YQU e
INNER JOIN (
SELECT db_id, MIN( price_per_pax_after_tax ) AS lowest_price, package_id, hotel_score
FROM `packages_sorted_YQU`
WHERE `package_type` IN ('9', '10', '18')
AND `package_duration` IN ('6', '8', '12')
GROUP BY
`date_start` , `package_supplier` , `backend_hotels_id`
) AS j
ON j.db_id = e.db_id
AND j.lowest_price= e.price_per_pax_after_tax
AND j.hotel_score = e.hotel_score
AND j.package_id = e.package_id;
表格很大,但列出的所有字段都是 INT,除了 date_start 是 DATE
导致问题的where子句是:
WHERE `package_type` IN ('9', '10', '18')
AND `package_duration` IN ('6', '8', '12')
如果没有 where 子句,我会得到超过 400 个结果,而使用 where 子句,我会得到零个结果 :( 非常感谢任何帮助。
【问题讨论】:
-
确定确实存在具有这些 ID 的包类型和持续时间?
-
您希望得到多少结果?
-
你需要得到多少结果
-
package_types 和 package_durations 确实存在于每个字段的至少一个 IN 参数中。例如package_type 10 AND package_duration 12 - 根据我的电子表格,我应该得到至少 200 个结果。
-
最后,你只有
SELECT * FROM packages_sorted_YQU WHERE package_type IN (9, 10, 18) AND package_duration IN (6, 8, 12)。运行此查询以确保确实有匹配的行。
标签: php mysql inner-join where-clause