php - 努力将 WHERE 子句添加到 INNER JOIN

标签 php mysql inner-join where-clause

我有一个查询,应该从每个 backend_hotels_id date_startpackage_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 子句,我会得到零个结果:( 非常感谢任何帮助。

最佳答案

如果您的列 package_typepackage_duration 的类型为 int,则不必将值包装在 ' 就像字符串一样。

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;

关于php - 努力将 WHERE 子句添加到 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061882/

相关文章:

php - 在 PHP 中调用 super 方法

c# - 从 C# App 运行 mysqldump 不工作

mysql - 包 mysql-server-5.7 需要重新安装,但我找不到它的存档

MySQL 两表内连接和计数

MySQL LEFT Join 显示不正确的数据

php - 如何使用 PHP 在 facebook 应用程序 Canvas 中实现 paypal?

php - 无法解决此错误:调用未定义的方法 DateTime::createFromFormat()

php - 从 api.microsofttranslator.com 到 Symfony 上的 azure 认知服务 Translator Text API

mysql - 在 MySQL 中按具有非固定范围的时间间隔分组

sql - 如何仅使用内部连接创建左连接?