MYSQL查询:如何按顺序合并两个表
有人能帮我解决这个问题吗?我一直在试图质疑这个问题,但我不断得到错误 MySQL代码: 各表: 图书用户 预订详情 结果应返回最新的返回日期,并按USR\U ID排序。 例如: 约翰,《崛起》,GHI,2012-06-12 简,购物狂,租一本书,2012-08-31 能源部,遗失,租一本书,2012-06-20 玛丽,新注册,租一本书,2012-02-02 该查询包含一个子查询,该子查询获取每个用户的最新返回日期MYSQL查询:如何按顺序合并两个表,mysql,Mysql,有人能帮我解决这个问题吗?我一直在试图质疑这个问题,但我不断得到错误 MySQL代码: 各表: 图书用户 预订详情 结果应返回最新的返回日期,并按USR\U ID排序。 例如: 约翰,《崛起》,GHI,2012-06-12 简,购物狂,租一本书,2012-08-31 能源部,遗失,租一本书,2012-06-20 玛丽,新注册,租一本书,2012-02-02 该查询包含一个子查询,该子查询获取每个用户的最新返回日期 SELECT a.*, c.BOOK_TITLE, c.RETURN_DATE
SELECT a.*, c.BOOK_TITLE, c.RETURN_DATE
FROM book_user a
INNER JOIN
(
SELECT usr_ID, MAX(return_DATE) maxDate
FROM booking_detail
GROUP BY usr_ID
) b ON a.usr_ID = b.usr_ID
INNER JOIN booking_detail c
ON b.usr_ID = c.usr_ID AND
b.maxDate = c.return_DATE
更新
使用左连接和合并
试试看:
SELECT *
FROM (
(
SELECT BU.*, BD.BOOK_TITLE, BD.BOOK_COMPANY AS COMPANY,BD.RETURN_DATE AS RETURN FROM BOOK_USER BU INNER JOIN BOOKING_DETAIL BD ON (BU.USR_ID = BD.USR_ID)
) UNION ALL (
SELECT BU.*, BD.BOOK_TITLE, 'RENT-A-BOOK' AS COMPANY,BD.RETURN_DATE AS RETURN FROM BOOK_USER BU INNER JOIN BOOKING_DETAIL BD ON (BU.USR_ID = BD.USR_ID)
)
) BU
GROUP BY BU.USR_ID
您可以使用以下查询直接获取输出检查查询:
SELECT BU.*, IFNULL(BD.BOOK_TITLE, 'NEW REGISTERED') AS BOOK_TITLE, IFNULL(BD.BOOK_COMPANY, 'RENT-A-BOOK') AS COMPANY,BD.RETURN_DATE AS RETURN
FROM BOOK_USER BU
LEFT JOIN (SELECT * FROM (SELECT USR_ID, BOOK_TITLE, BOOK_COMPANY, RETURN_DATE FROM BOOKING_DETAIL ORDER BY RETURN_DATE DESC) AS A GROUP BY USR_ID) AS BD ON (BU.USR_ID = BD.USR_ID)
ORDER BY BU.USR_ID;
+1要添加具有所需结果的样本记录,请指定此子项之间的差异。我发现两个查询中的条件都是相同的。@SaharshShah:如果公司名称列为空,我使用union返回公司名称作为租书。伙计们,我很抱歉。我已经编辑了我的问题,实际上是查询。这就是我现在遇到的问题。我很抱歉。我已经编辑了我的问题,实际上是查询。这就是我现在面临的问题,它对我不起作用。我的意思是,查询是有效的,但并不像预期的那样。事实上,我之前的查询还可以,只是它显示了每个usr_id的第一行。我想要最新的日期。也许你在加入时错过了什么。
SELECT a.*, c.BOOK_TITLE, c.RETURN_DATE
FROM book_user a
INNER JOIN
(
SELECT usr_ID, MAX(return_DATE) maxDate
FROM booking_detail
GROUP BY usr_ID
) b ON a.usr_ID = b.usr_ID
INNER JOIN booking_detail c
ON b.usr_ID = c.usr_ID AND
b.maxDate = c.return_DATE
SELECT a.USR_ID,
a.USR_NAME,
COALESCE(c.BOOK_TITLE,'RENT-A-BOOK') BOOK_TITLE,
COALESCE(c.RETURN_DATE, a.REGISTER_DATE) RETURN_DATE
FROM book_user a
LEFT JOIN
(
SELECT usr_ID, MAX(return_DATE) maxDate
FROM booking_detail
GROUP BY usr_ID
) b ON a.usr_ID = b.usr_ID
LEFT JOIN booking_detail c
ON b.usr_ID = c.usr_ID AND
b.maxDate = c.return_DATE
SELECT *
FROM (
(
SELECT BU.*, BD.BOOK_TITLE, BD.BOOK_COMPANY AS COMPANY,BD.RETURN_DATE AS RETURN FROM BOOK_USER BU INNER JOIN BOOKING_DETAIL BD ON (BU.USR_ID = BD.USR_ID)
) UNION ALL (
SELECT BU.*, BD.BOOK_TITLE, 'RENT-A-BOOK' AS COMPANY,BD.RETURN_DATE AS RETURN FROM BOOK_USER BU INNER JOIN BOOKING_DETAIL BD ON (BU.USR_ID = BD.USR_ID)
)
) BU
GROUP BY BU.USR_ID
SELECT BU.*, IFNULL(BD.BOOK_TITLE, 'NEW REGISTERED') AS BOOK_TITLE, IFNULL(BD.BOOK_COMPANY, 'RENT-A-BOOK') AS COMPANY,BD.RETURN_DATE AS RETURN
FROM BOOK_USER BU
LEFT JOIN (SELECT * FROM (SELECT USR_ID, BOOK_TITLE, BOOK_COMPANY, RETURN_DATE FROM BOOKING_DETAIL ORDER BY RETURN_DATE DESC) AS A GROUP BY USR_ID) AS BD ON (BU.USR_ID = BD.USR_ID)
ORDER BY BU.USR_ID;