我有如下两个MySQL表:如何用LEFT JOIN修复这个SQL?
mysql> desc subscriptions;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(6) | NO | PRI | NULL | auto_increment |
| id_user | int(6) | NO | MUL | NULL | |
| id_package | int(4) | NO | | NULL | |
| expiry | date | YES | | NULL | |
| ip | varchar(100) | NO | | NULL | |
| amount | double | NO | | NULL | |
| processed | tinyint(4) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
mysql> desc packages;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(6) | NO | PRI | NULL | auto_increment |
| id_panel | tinyint(4) | NO | | NULL | |
| name | varchar(100) | NO | | NULL | |
| price | double | NO | | NULL | |
| period | varchar(50) | NO | | NULL | |
| days | int(11) | NO | | NULL | |
| visible | tinyint(4) | NO | | NULL | |
| payment | tinyint(4) | NO | | 1 | |
+----------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
我使用的后续查询以检索所有的包和相关用户过期日期(具体包)。
SELECT packages.id, packages.name, packages.price, packages.period, packages.days, MAX(subscriptions.expiry) as expiry
FROM packages LEFT JOIN subscriptions
ON subscriptions.id_package = packages.id AND subscriptions.processed = 1 AND subscriptions.id_user = 1
WHERE packages.visible = 1
GROUP BY subscriptions.id_user
ORDER BY packages.id_panel
我的问题是,如果没有订阅特定的包,查询不会显示包。
我必须表现出所有的页面和....如果用户已经订阅检查MAX到期日(becase的我跟踪所有用户所做的subscrions)。
我该怎么让所有的包和相关用户的到期日期? (如果没有订阅包显示NULL)
是不正确的,正确的.... packages.id – Dail 2012-01-17 12:25:24
@Dail - 伟大的,有在GROUP BY不同领域确实现在你的查询工作? :) – MatBailie 2012-01-17 12:28:06
是的,它完美的作品 – Dail 2012-01-17 12:29:01