Mysql 左连接案例
我有以下 mysql 表字段,
|action_id|timestamp|user|module|action|object|info|interface|
其内容如下:
69 |2021-12-06 22:15:43|1 |CATALOGUING|ADD|24 |item |intranet
122058|2022-02-23 09:47:17|13|CATALOGUING|ADD|10338|biblio|intranet
这是我正在处理的 mysql 查询:
SELECT action_id, i.barcode, CONCAT('<a href=\"/cgi-bin/koha/catalogue/detail.pl?biblionumber=',biblio.biblionumber,'\">',b.title,'</a>') AS Title, biblio.author, al.timestamp, CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=',borrowers.borrowernumber,'\">',borrowers.surname, ', ', borrowers.firstname,'</a>') AS Librarian, i.permanent_location, (CASE WHEN al.info LIKE "biblio%" THEN 'biblio' ELSE 'item' END) as typeofentry, al.action as type_of_action, al.info from action_logs AS al LEFT JOIN borrowers ON al.user =
CASE WHEN al.info LIKE "biblio%" THEN
borrowers.borrowernumber LEFT JOIN biblio on al.object=biblio.biblionumber
ELSE borrowers.borrowernumber LEFT JOIN items AS i on al.object=i.itemnumber LEFT JOIN biblio on i.biblionumber=biblio.biblionumber
END
我正在尝试使用 CASE WHEN 进行 LEFT JOIN,这样如果“info”列是 biblio,则查询应该左连接与 biblio 并忽略与项目表的 LEFT JOIN。如果“info”列是 item,那么它应该与 item 左连接,然后与 biblio 左连接。使用 LEFT JOIN 是否可以实现这一点?这就是我一直在尝试模仿的: 如何使用 case 语句来确定要离开哪个字段
I have the following mysql table fields
|action_id|timestamp|user|module|action|object|info|interface|
Content of which are below:
69 |2021-12-06 22:15:43|1 |CATALOGUING|ADD|24 |item |intranet
122058|2022-02-23 09:47:17|13|CATALOGUING|ADD|10338|biblio|intranet
Here is the mysql query that I am working on:
SELECT action_id, i.barcode, CONCAT('<a href=\"/cgi-bin/koha/catalogue/detail.pl?biblionumber=',biblio.biblionumber,'\">',b.title,'</a>') AS Title, biblio.author, al.timestamp, CONCAT('<a href=\"/cgi-bin/koha/members/moremember.pl?borrowernumber=',borrowers.borrowernumber,'\">',borrowers.surname, ', ', borrowers.firstname,'</a>') AS Librarian, i.permanent_location, (CASE WHEN al.info LIKE "biblio%" THEN 'biblio' ELSE 'item' END) as typeofentry, al.action as type_of_action, al.info from action_logs AS al LEFT JOIN borrowers ON al.user =
CASE WHEN al.info LIKE "biblio%" THEN
borrowers.borrowernumber LEFT JOIN biblio on al.object=biblio.biblionumber
ELSE borrowers.borrowernumber LEFT JOIN items AS i on al.object=i.itemnumber LEFT JOIN biblio on i.biblionumber=biblio.biblionumber
END
I am trying to use CASE WHEN for LEFT JOIN such that if the "info" column is biblio, the query should left join with biblio and ignores LEFT JOIN with item table. If the "info" column is item, then it should LEFT JOIN with item then LEFT JOIN with biblio. Is this even possible with LEFT JOIN. This is what I have been trying to emulate: How to use a case statement to determine which field to left join on
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法像此处那样进行案例/加入时。由于您有一种分开的方式来执行 HTML 链接引用,并且每个引用都有自己的 biblio 记录上下文,因此您最好从 biblio 与非 biblio 的两个不同查询中获取片段,并对其进行 UNION。获取该结果并将其应用于您的连接过程。像这样的东西
You can't do a case/when join as you have here. Since you have a split way of doing the HTML link references, and each has its own context of a biblio record, you might be best to get the pieces from two distinct queries of biblio vs non-biblio and UNION them. Take that result and apply to your concat process. Something like