SQL where子句被忽略

时间:2019-04-06 12:56:25

标签: sql inner-join

我有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 

我要去哪里错了?

2 个答案:

答案 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