簡體   English   中英

如何在 MySQL 的查詢中用一個引用連接三個表

[英]How to Join three tables with one reference in the query in MySQL

您好,有沒有辦法像這樣連接三個表,但我無法在查詢中更改列code.id的引用,因為我正在為此引用創建搜索過濾器的動態查詢

這是代碼看起來像

有 4 個表 bill、expense_distribution、item_distribution、project_code

賬單中的列 - id,名稱,...等 expense_distribution 中的列 - id,bill_id,project_code_id,...等 item_distribution 中的列 - id,bill_id,project_code_id,...等 project_code 中的列 - id,姓名,...等等

SELECT b.id, code.name FROM bill b 
LEFT JOIN expense_distribution exp ON b.id=exp.bill_id
LEFT JOIN project_code code ON exp.project_code_id=code.id
LEFT JOIN item_distribution itm ON b.id=itm.bill_id
LEFT JOIN project_code code ON itm.project_code_id=code.id

我不能將查詢與兩次project_code code一起使用,但由於過濾器,我想要code.id用於項目和費用分配。

有人可以指導我最好的方法嗎,我正在使用 JPQL 作為 Java 中的代碼

有多種方法可以解決這個問題。 實現此目的的一種方法是為同一個表提供不同的別名並合並字段。

SELECT b.id, COALESCE(c1.name, c2.name) as name FROM bill b 
LEFT JOIN expense_distribution exp ON b.id=exp.bill_id
LEFT JOIN item_distribution itm ON b.id=itm.bill_id
LEFT JOIN project_code c1 ON exp.project_code_id=c1.id
LEFT JOIN project_code c2 ON itm.project_code_id=c2.id;

另一種方法是,將第一行和最后兩行更改為

SELECT b.id, code.name FROM bill b 
LEFT JOIN expense_distribution exp ON b.id=exp.bill_id
LEFT JOIN item_distribution itm ON b.id=itm.bill_id
LEFT JOIN project_code code ON COALESCE(itm.project_code_id, exp.project_code_id)=code.id;

三、把上面最后一行改成

LEFT JOIN project_code c1 ON exp.project_code_id=code.id OR itm.project_code_id=code.id

這是表創建:

 CREATE TABLE bill(
 id int(11),
 name varchar(10)
 ); 
 CREATE TABLE project_code(
 id int(11),
 name varchar(10)
 );
 CREATE TABLE expense_distribution(
 id int(11),
 bill_id int(11),
 project_code_id int(11),
 name varchar(10)
 );
 CREATE TABLE item_distribution(
 id int(11),
 bill_id int(11),
 project_code_id int(11),
 name varchar(10)
 );
 

基於這些表,您可以查詢以下查詢:

SELECT b.id, codes.name FROM bill b 
LEFT JOIN expense_distribution exp ON b.id=exp.bill_id
LEFT JOIN project_code codes ON exp.project_code_id=codes.id
LEFT JOIN item_distribution itm ON b.id=itm.bill_id and itm.project_code_id =codes.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM