我有两个名为tblborrow和tblreturn的表,其中都有日期列。
现在,我要做的是显示几乎所有来自tblborrow和tblreturn的列,按照它们的date_borrowed和date_returned联合显示。
我的tblborrow包含以下列:
虽然tblreturn包含:
我已经使用以下方法用左连接显示它们:
SELECT a.isbn, a.member_id, a.staff_id, a.date_borrowed, b.staff_id, b.date_returned
FROM tblborrow AS a left join tblreturn AS b on a.borrow_id = b.borrow_id
ORDER BY date_borrowed, date_returned
除了date_returned和date_borrowed显示在不同的列中之外,它给了我所需要的东西。
现在我尝试使用UNION来测试它是否也能满足我的需求,因此我使用了:
SELECT date_borrowed FROM tblborrow
UNION ALL
SELECT date_returned FROM returning
确实如此。但我需要这些仅在一个查询中。我试图简单地组合这样的查询:
SELECT a.isbn, a.member_id, a.staff_id, b.staff_id,
(SELECT date_borrowed FROM tblborrow
UNION ALL
SELECT date_returned FROM returning)
FROM tblborrow AS a left join tblreturn AS b on a.borrow_id = b.borrow_id
ORDER BY date_borrowed, date_returned
但它说“Subquery返回的行数超过1行”,经过大量彻底的谷歌搜索后,我似乎无法做到这一点。
帮助,有人吗?提前谢谢!
答案 0 :(得分:2)
如果要为借用/返回组合分隔行,则union all
是合适的。如果是这样,我认为这样做你想要的:
SELECT b.isbn, b.member_id, b.staff_id, date_borrowed, 'borrow' as which
FROM tblborrow b
UNION ALL
SELECT b.isbn, b.member_id, r.staff_id, date_returned, 'return' as which
FROM tblreturn r join
tblborrow b
on r.borrw_id = b.borrow_id;
答案 1 :(得分:0)
通过在工会集上添加连接来尝试此操作
SELECT
a.isbn,
a.member_id,
a.staff_id,
b.staff_id,
u.combined_date
FROM
tblborrow AS a
LEFT JOIN tblreturn AS b
ON a.borrow_id = b.borrow_id
LEFT JOIN
(SELECT
borrow_id,
date_borrowed AS combined_date
FROM
tblborrow
UNION
ALL
SELECT
borrow_id,
date_returned AS combined_date
FROM
returning) u
ON (u.borrow_id = a.borrow_id)
ORDER BY u.combined_date
答案 2 :(得分:0)
尝试以下方法。因为您要将2个不同的日期值合并到同一列中,所以您需要区分哪些行反映了返回与借用操作。
我假设您希望借用/返回日期详细信息在每一行。如果你不关心那,那么戈登的最后回应就没问题了。
下面的第一个栏目将显示借阅但未归还的书籍的空白。
UNION ALL也会简单地保留重复的行而不是丢弃它们。如果使用UNION ALL而不是UNION,下面的查询应该没有区别,因为它不会返回任何重复项。
select 'BORROW' as action
, b.date_borrowed as action_date
, b.isbn
, b.member_id
, b.staff_id as borrow_from_staff
, b.date_borrowed
, r.date_returned
, r.staff_id as return_to_staff
from tblborrow b
left join tblreturn r
on b.borrow_id = r.borrow_id
union
select 'RETURN' as action
, r.date_returned as action_date
, b.isbn
, b.member_id
, b.staff_id as borrow_from_staff
, b.date_borrowed
, r.date_returned
, r.staff_id as return_to_staff
from tblreturn r
join tblborrow b
on r.borrow_id = b.borrow_id
order by action_date
, isbn