我有2张桌子:
pf_master
temp_table
pf_master布局是
username
pf_name
pf_id
并且pf_master中的数据是
username pf_name pf_id
-------------------------
xyz General 3
xyz Overall 0
abc General 3
临时表的布局是
pf_id
inv_val
curr_val
xirr
loginid
timestamp
和临时表中的值是
pf_id inv_val curr_val xirr loginid timestamp
--------------------------------------------------------------------
0 100 200 10% xyz 2019-04-06 12:21:28
3 100 300 11% xyz 2019-04-06 12:21:40
我想获取“ abc”用户的所有记录以及pf_name。但是'abc'在temp_table中没有任何记录,因此理想情况下,此查询应返回NULL。但是它返回的是'xyz'用户的值。
我的SQL是:
SELECT
pf_master.pf_name,
temp_table.inv_val, temp_table.curr_val, temp_table.xirr
FROM
temp_table
INNER JOIN
pf_master ON pf_master.pf_id = temp_table.pf_id
WHERE
pf_master.username = 'abc'
ORDER BY
pf_master.pf_id ASC
我要去哪里错了?
答案 0 :(得分:1)
您需要在连接中包括用户名和pf_id,因为pf_id本身不足以标识唯一用户。
SELECT
pf_master.pf_name,
temp_table.inv_val,
temp_table.curr_val,
temp_table.xirr
FROM temp_table t
JOIN pf_master p
ON p.pf_id = t.pf_id
AND p.username = t.loginid
WHERE
p.username = 'abc'
ORDER BY
p.pf_id ASC
答案 1 :(得分:0)
首先,从pf_master中获取所有记录,其中username ='abc'
SELECT * FROM pf_master WHERE username = 'abc'
然后在您的问题中更改INNER_JOIN子句,而不应该使用整个表pf_master
类似这样的东西:
INNER JOIN
(SELECT * FROM pf_master WHERE username = 'abc') AS tmp ON tmp.pf_id = tmp_table.pf_id