我有两个这样的表结构:
episodes (
episode_id MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
episode_series_id MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
episode_series_season TINYINT(2) UNSIGNED NOT NULL DEFAULT '0',
episode_series_episode SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
episode_title VARCHAR(200) NOT NULL DEFAULT '',
PRIMARY KEY (episode_id),
KEY series_id (episode_series_id),
KEY episode_series_season (episode_series_season),
KEY episode_series_episode (episode_series_episode)
) ENGINE=MyISAM;
watchlist (
watchlist_id MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
watchlist_user_id MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
watchlist_series_id MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
watchlist_series_episode_id MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
watchlist_status TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (watchlist_id),
KEY watchlist_series_episode_id (watchlist_series_episode_id),
KEY watchlist_series_id (watchlist_series_id)
) ENGINE=MyISAM;"
我想加入这两个,并显示所有结果。
这对我没有帮助:
SELECT e.*, w.* FROM episodes e, watchlist w WHERE e.episode_series_id='1' AND e.episode_series_season='1' AND w.watchlist_user_id='1'
我正在使用这个查询,但像往常一样,它只显示匹配的列(episodes 表中有 30 多行,watchlist 表中有 2 行)
SELECT e.*,w.* FROM episodes e INNER JOIN watchlist w ON e.episode_id=w.watchlist_series_episode_id WHERE e.episode_series_id='1' AND e.episode_series_season='1' AND w.watchlist_user_id='1'
但它只显示 2 行(应该如此)。
episode_id episode_series_id episode_series_season episode_series_episode episode_title watchlist_id watchlist_user_id watchlist_series_id watchlist_series_episode_id watchlist_status
1 1 1 1 Pilot 1 1 1 1 0
2 1 1 2 Paternity 2 1 1 2 0
但我想显示所有匹配结果(我想从这两个表中选择所有列,列出剧集,如果监视列表中有匹配项我想从监视列表列中填充数据,否则它们应该为空)
我想得到这样的结果:
episode_id episode_series_id episode_series_season episode_series_episode episode_title watchlist_id watchlist_user_id watchlist_series_id watchlist_series_episode_id watchlist_status
1 1 1 1 Pilot 1 1 1 1 0
2 1 1 2 Paternity 2 1 1 2 0
3 1 1 3 whatever1 null null null null null
4 1 1 4 whatever2 null null null null null
5 1 1 5 whatever3 null null null null null
我无法将这些放在一起。我该怎么做?
谢谢。
最佳答案
这就是 LEFT JOIN
的用途,而不是 INNER JOIN
SELECT e.*,w.*
FROM episodes e
LEFT JOIN watchlist w
ON e.episode_id=w.watchlist_series_episode_id AND w.watchlist_user_id='1'
WHERE e.episode_series_id='1'
AND e.episode_series_season='1'
w.watchlist_user_id
的条件也必须出现在 ON 子句中。
关于mysql - 连接两个表,但如何显示所有结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249196/