我有如下兩個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