これには当て推量が含まadmin
れquant1
ます。そしてadmin_custom
ただquant1_cust
?これにより、これら 2 つのフィールドの個別のリストに必要な労力が軽減されます。
SELECT `Fund_ID`, `Fund_Name`
FROM `admin`
INNER JOIN `quant1` ON `admin`.`Fund_ID` = `quant1`.`Fund_ID`
AND `quant1`.`VaR 95`>-0.028
UNION
SELECT `Fund_ID`, `Fund_Name`
FROM `admin_custom`
INNER JOIN `quant1_cust` ON `admin_custom`.`Fund_ID` = `quant1_cust`.`Fund_ID`
AND `admin_custom`.`user_id` = `quant1_cust`.`user_id`
AND `quant1_cust`.`VaR 95`>-0.028
WHERE `admin_custom`.`user_id`=361
;
既存のクエリ構造を見ると、しないことをお勧めすることがいくつかあります。UNION と SELECT DISTINCT を使用しても意味がありません。select * を UNION または UNION ALL と一緒に使用しないでください。具体的にして、本当に必要なフィールドのみを含めてください。また、既存の where 句は、左結合によって返される null を抑制します。そのため、左結合を使用しないでください。
SELECT DISTINCT --<< effort for distinctiveness here
...
FROM (
SELECT * --<< too many fields
...
UNION --<< effort for distinctiveness here
SELECT * --<< too many fields
...
)
LEFT JOIN (
SELECT * --<< too many fields
...
UNION --<< effort for distinctiveness here
SELECT * --<< too many fields
...
) quant1
WHERE quant1 ...
編集: 代替 - 申し訳ありませんが、この方法に従う方が簡単かもしれません:
SELECT `Fund_ID`, `Fund_Name`
FROM `admin`
INNER JOIN `quant1` ON `admin`.`Fund_ID` = `quant1`.`Fund_ID`
WHERE `quant1`.`VaR 95`>-0.028
UNION
SELECT `Fund_ID`, `Fund_Name`
FROM `admin_custom`
INNER JOIN `quant1_cust` ON `admin_custom`.`Fund_ID` = `quant1_cust`.`Fund_ID`
AND `admin_custom`.`user_id` = `quant1_cust`.`user_id`
WHERE `admin_custom`.`user_id`=361
AND `quant1_cust`.`VaR 95`>-0.028
;