我在MySQL
中使用Crystal Reports
。
我有2个查询,我需要在这两个之间应用full outer join
。但据我们所知,MySQL
将不支持full outer join
。所以我在这两个命令对象之间使用full outer join
给了left outer join union right outer
。
它工作正常。但我在两个查询中都有许多常用列。举一个例子,有一列名为Till Number
。有一种情况是,如果command1.tillnumber
为null,那么我需要显示command2.tillnumber
,但现在我们正在应用完全外连接。我的意思是我们只有一个查询。所以它提供了所有数据。那么如果查询1数据不为空,我怎么能得到它。
完全外部联接的查询如下:
SELECT q1.pos_no
, q1.pos_name
, q1.start_trans_id
, q1.end_trans_id
, q1.EodDeposit
, q2.net
FROM ( <<<QUERY:1>>> ) AS q1
LEFT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q2.pos_no = q1.pos_no
UNION
SELECT q2.pos_no
, q2.pos_name
, q1.start_trans_id
, q1.end_trans_id
, q1.EodDeposit
, q 2. net
FROM ( <<<QUERY:1>>> ) AS q 1
RIGHT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q1. pos_no = q2. pos_no
;
请建议
答案 0 :(得分:0)
您可以通过将结果集设为table
并以进一步在列上应用条件的方式来实现此目的
SELECT q.* FROM (
SELECT q1.pos_no
, q1.pos_name
, q1.start_trans_id
, q1.end_trans_id
, q1.EodDeposit
, q2.net
FROM ( <<<QUERY:1>>> ) AS q1
LEFT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q2.pos_no = q1.pos_no
UNION
SELECT q2.pos_no
, q2.pos_name
, q1.start_trans_id
, q1.end_trans_id
, q1.EodDeposit
, q 2. net
FROM ( <<<QUERY:1>>> ) AS q 1
RIGHT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q1. pos_no = q2. pos_no
) q WHERE q.pos_no !="" AND q.start_trans_id !="" // same way add the conditions
希望它可以帮到你
答案 1 :(得分:0)
使用IFNULL
SELECT IFNULL(q1_pos_no, q2_pos_no)
, IFNULL(q1_pos_name, q2_pos_name)
, IFNULL(q1_start_trans_id, q2_start_trans_id)
, IFNULL(q1_end_trans_id, q2_end_trans_id)
, IFNULL(q1_EodDeposit, q2_EodDeposit)
, IFNULL(q1_net, q2_net)
FROM
(
SELECT q1.pos_no AS q1_pos_no
, q1.pos_name AS q1_pos_name
, q1.start_trans_id AS q1_start_trans_id
, q1.end_trans_id AS q1_end_trans_id
, q1.EodDeposit AS q1_EodDeposit
, q1.net AS q1_net,
, q2.pos_no AS q2_pos_no
, q2.pos_name AS q2_pos_name
, q2.start_trans_id AS q2_start_trans_id
, q2.end_trans_id AS q2_end_trans_id
, q2.EodDeposit AS q2_EodDeposit
, q2.net AS q2_net
FROM ( <<<QUERY:1>>> ) AS q1
LEFT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q2.pos_no = q1.pos_no
UNION
SELECT q1.pos_no AS q1_pos_no
, q1.pos_name AS q1_pos_name
, q1.start_trans_id AS q1_start_trans_id
, q1.end_trans_id AS q1_end_trans_id
, q1.EodDeposit AS q1_EodDeposit
, q1.net AS q1_net,
, q2.pos_no AS q2_pos_no
, q2.pos_name AS q2_pos_name
, q2.start_trans_id AS q2_start_trans_id
, q2.end_trans_id AS q2_end_trans_id
, q2.EodDeposit AS q2_EodDeposit
, q2.net AS q2_net
FROM ( <<<QUERY:1>>> ) AS q 1
RIGHT OUTER JOIN
( <<<QUERY:2>>> ) AS q2
ON q1. pos_no = q2. pos_no
) Sub1
;