[英]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.