各位好~
我有兩個資料表: 分別為member跟 join
member:欄位如下
id name tel
101 李大明 09101111
102 李珦 09501551
103 張無忌 09601661
104 陳村明 09801771
join:欄位如下
j_no id join_time
1 101 2012/2/20
2 103 2012/2/10
3 104 2012/2/16
我可以下兩層sql語法利用將member全部列出,
在下去抓join資料表,達到這樣的效果:
[所有報名資料]
姓名 報名時間
李大明 2012/2/20
李珦 尚未報名
張無忌 2012/2/10
陳村明 2012/2/16
↑上面的語法我目前有寫出來~
但是該如何下語法列出沒有報名的呢?
↓想要達到以下效果
[直接列出尚未報名者]
姓名 報名時間
李珦 尚未報名
謝謝指教了!
<pre class="c" name="code">CREATE TABLE ithelp0221_member(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL
);
INSERT INTO ithelp0221_member(id, name) VALUES
('101','李大明'),
('102','李珦'),
('103','張無忌'),
('104','陳村明');
CREATE TABLE ithelp0221_join(
j_no INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id INT NOT NULL,
join_date DATE
);
INSERT INTO ithelp0221_join(id, join_date) VALUES
(101, '2012/2/20'),
(103, '2012/2/10'),
(104, '2012/2/16');
-------------------------
SELECT m.name AS "姓名", CASE WHEN j.join_date IS NULL THEN "尚未報名" ELSE j.join_date END AS "報名時間"
FROM ithelp0221_member m LEFT JOIN ithelp0221_join j
ON m.id = j.id
WHERE j.join_date IS NULL;
+--------+--------------+
| 姓名 | 報名時間 |
+--------+--------------+
| 李珦 | 尚未報名 |
+--------+--------------+
hitomitanaka 的 SQL 效率比 bzbz 的好。不過 hitomitanaka 的語法可以不必用到 case 會更快:
<pre class="c" name="code">SELECT m.name AS "姓名", if(j.join_date IS NULL,"尚未報名",j.join_date) AS "報名時間"
FROM ithelp0221_member m LEFT JOIN ithelp0221_join j
ON m.id = j.id
WHERE j.join_date IS NULL;