Mysql 多表联接不返回null/blank时需要帮助
我有三个表(s_place,s_place,s_bing,s_place,s_yahoo),它们具有相同的模式,并且包含来自三个不同来源的类似结果。我想要的是一个查询,它返回来自三个表的所有结果,这三个表匹配给定的s___id、s_q_id和日期Mysql 多表联接不返回null/blank时需要帮助,mysql,Mysql,我有三个表(s_place,s_place,s_bing,s_place,s_yahoo),它们具有相同的模式,并且包含来自三个不同来源的类似结果。我想要的是一个查询,它返回来自三个表的所有结果,这三个表匹配给定的s___id、s_q_id和日期 +-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Def
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| s_u_id | int(10) | NO | | NULL | |
| s_q_id | int(10) | NO | | NULL | |
| place | int(10) | NO | | NULL | |
| date | int(10) | YES | | NULL | |
| fullurl | varchar(255) | NO | | NULL | |
| above_today | varchar(255) | NO | | NULL | |
| above_yesterday | varchar(255) | NO | | NULL | |
| below_today | varchar(255) | NO | | NULL | |
| below_yesterday | varchar(255) | NO | | NULL | |
| yesterday | int(11) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
对于相同的s_____id、s_q_id和日期,一个表中的结果很可能比另一个表中的结果多。在这种情况下,它应该为没有数据的表返回空行或空行
我已经使用下面的查询实现了这一点,但是它不会返回null/空格
SELECT s_place.s_u_id, s_place.s_q_id, `s_place`.place as place, `s_place`.fullurl as fullurl, `s_place`.date as date, s_place_bing.place as b_place,`s_place_bing`.fullurl as b_fullurl, s_place_bing.date as b_date, s_place_yahoo.place as y_place, `s_place_yahoo`.fullurl as y_fullurl, s_place_yahoo.date as y_date
from s_place
left join s_place_bing on s_place_bing.s_q_id = s_place.s_q_id and s_place_bing.date = s_place.date
left join s_place_yahoo on s_place_yahoo.s_q_id = s_place.s_q_id and s_place_yahoo.date = s_place.date
where s_place.s_u_id = 1 and s_place.s_q_id = 64
order by s_place.date desc
+--------+--------+-------+----------------------+------------+---------+--------------------------+------------+---------+-------------------+------------+
| s_u_id | s_q_id | place | fullurl | date | b_place | b_fullurl | b_date | y_place | y_fullurl | y_date |
+--------+--------+-------+----------------------+------------+---------+--------------------------+------------+---------+-------------------+------------+
| 1 | 64 | 39 | rrr.co.uk | 1292112000 | 30 | rrr.co.uk | 1292112000 | 6 | rrr.co.uk | 1292112000 |
| 1 | 64 | 39 | rrr.co.uk | 1292112000 | 65 | rrr.co.uk search/ | 1292112000 | 6 | rrr.co.uk | 1292112000 |
| 1 | 64 | 36 | rrr.co.uk | 1292025600 | 30 | rrr.co.uk | 1292025600 | 6 | rrr.co.uk | 1292025600 |
| 1 | 64 | 36 | rrr.co.uk | 1292025600 | 64 | rrr.co.uk search/ | 1292025600 | 6 | rrr.co.uk | 1292025600 |
| 1 | 64 | 40 | rrr.co.uk | 1291939200 | 66 | rrr.co.uk search/ | 1291939200 | 9999 | | 1291939200 |
| 1 | 64 | 40 | rrr.co.uk | 1291939200 | 29 | rrr.co.uk | 1291939200 | 9999 | | 1291939200 |
| 1 | 64 | 38 | rrr.co.uk | 1291852800 | 29 | rrr.co.uk | 1291852800 | 6 | rrr.co.uk | 1291852800 |
| 1 | 64 | 38 | rrr.co.uk | 1291852800 | 68 | rrr.co.uk search/ | 1291852800 | 6 | rrr.co.uk | 1291852800 |
这就是它应该如何返回数据
+--------+--------+-------+----------------------+------------+---------+--------------------------+------------+---------+-------------------+------------+
| s_u_id | s_q_id | place | fullurl | date | b_place | b_fullurl | b_date | y_place | y_fullurl | y_date |
+--------+--------+-------+----------------------+------------+---------+--------------------------+------------+---------+-------------------+------------+
| 1 | 4 | 39 | rrr.co.uk | 1292112000 | 30 | rrr.co.uk | 1292112000 | 6 | rrr.co.uk | 1292112000 |
| 1 | 64 | | | | 65 | rrr.co.uk search/ | 1292112000 | | | |
| 1 | 64 | 36 | rrr.co.uk | 1292025600 | 30 | rrr.co.uk | 1292025600 | 6 | rrr.co.uk | 1292025600 |
| 1 | 64 | | | | 64 | rrr.co.uk search/ | 1292025600 | | | |
| 1 | 64 | 40 | rrr.co.uk | 1291939200 | 66 | rrr.co.uk search/ | 1291939200 | 9999 | | 1291939200 |
| 1 | 64 | | | | 29 | rrr.co.uk | 1291939200 | | | |
| 1 | 64 | 38 | rrr.co.uk | 1291852800 | 29 | rrr.co.uk | 1291852800 | 6 | rrr.co.uk | 1291852800 |
| 1 | 64 | | | | 68 | rrr.co.uk search/ | 1291852800 | | | |
希望有人能帮忙。干杯,Matt请注意,在您想要的结果集中,唯一完全填充的列来自您的s\u place\u bing
表。因此,从您显示的结果集来看,您应该左连接s_place
和s_place\u yahoo
表到s_place\u bing
表
话虽如此,您当前的查询是按s_place.date desc
排序的,但您所需的结果集在该字段中为空/空
这会给你想要的结果吗
SELECT
b.s_u_id, b.s_q_id,
p.place AS p_place, p.fullurl AS p_fullurl, p.date AS p_date,
b.place AS b_place, b.fullurl AS b_fullurl, b.date AS b_date,
y.place AS y_place, y.fullurl AS y_fullurl, y.date AS y_date
FROM s_place_bing b
LEFT JOIN s_place p ON b.s_q_id = p.s_q_id AND b.date = p.date
LEFT JOIN s_place_yahoo y ON b.s_q_id = y.s_q_id AND b.date = y.date
WHERE b.s_u_id = 1 and b.s_q_id = 64
ORDER BY b.date DESC