[英]Joining Two Tables, but how to show all results?
I have two table structures like these: 我有两个像这样的表结构:
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;"
I want to join these two, and show all results. 我想加入这两个,并显示所有结果。
This didn't help me: 这对我没有帮助:
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'
I'm using this query, but as usual, it shows only matching columns (30+ lines in episodes table, 2 lines in watchlist table) 我正在使用此查询,但与往常一样,它仅显示匹配的列(情节表中有30多行,监视列表中有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'
But it only shows 2 lines (as it should). 但它仅显示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
But I want to show all matching results (I want to select all columns from these two table, list episodes, if there's a match from watchlist I want to fill data from watchlist column, else they should be null) 但是我想显示所有匹配的结果(我想从这两个表中选择所有列,列出情节,如果监视列表中存在匹配项,我想从监视列表列中填充数据,否则它们应该为null)
I want to get results like this: 我想得到这样的结果:
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
I couldn't put this together. 我不能把这些放在一起。 How can I do this? 我怎样才能做到这一点?
Thanks. 谢谢。
That's what LEFT JOIN
is for, instead of INNER JOIN
这就是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
must also appear in the ON clause. w.watchlist_user_id
上的条件也必须出现在ON子句中。 Just use LEFT JOIN
? 只需使用LEFT JOIN
?
SELECT * FROM episodes e
LEFT 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'
将您的INNER JOIN
更改为OUTER JOIN
或LEFT JOIN
(即LEFT OUTER JOIN
)。
尝试将左侧的连接情节留在左侧,将监视的情节留在右侧...。它将返回所有情节和相应的监视-列表(如果有)...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.