比较varg值postgresql

时间:2018-01-22 09:58:31

标签: sql postgresql

我是db世界的新手,我正在尝试进行第一次查询。

我有两个表,我需要将第一个表中columnA的值与第二个表中columnB的值进行比较。

我想知道columnAcolumnB中的值是什么。这两列都是varchar类型。

我已经尝试过这两个问题:

select *
from tableA
join tableB
    on (tableA.columnA = tableB.columnB);

select *
from tableA 
where columnA in (select columnB
                  from tableB);

但两人都让我回到了空桌旁。

我手动检查了这些值,并且有许多相等的值。

也许=不是正确的字符串值运算符?

这是我要做的一个简单的例子,结果是预期的结果。

TableA

columnA    descriptionA   
EF8236PA   xyx   
EF7843DV   dgfd
EF6535MD   dshr
EF3274LK   hghg
EF6940BN   fdtsg
EF3405TJ   dsbfbs

TableB

columnB    
EF3405TJ      
EF6940BN   
EF6535MD      

结果:

EF3405TJ
EF6940BN
EF6535MD

3 个答案:

答案 0 :(得分:0)

您的两个查询都很好看。你可以在where子句中添加更多条件,使其工作。

示例:

select *
from tableA
join tableB
    on (upper(trim(tableA.columnA)) = upper(trim(tableB.columnB)));

修剪将减少额外的空格,而上部将使搜索不敏感。

希望这会有所帮助。

答案 1 :(得分:0)

  

我想知道columnAcolumnB中的值是什么。

严格地说,这个查询是一个正确(快速)的查询来实现你的要求:

SELECT DISTINCT columnA
FROM   tableA a
WHERE  EXISTS (SELECT 1 FROM tableB WHERE columnB = a.columnA);

the site

但是你的查询都不应该返回空集。可能有空格或其他隐形字符欺骗你。测试:

SELECT * FROM tableA WHERE columnA = 'EF6940BN';
SELECT * FROM tableB WHERE columnB = 'EF6940BN';

答案 2 :(得分:0)

我尝试了你所有的建议,但没有人工作。

所以我尝试在另一个postgre上运行代码,并且我上面写的代码相同。

我不明白为什么,postgre的版本是相同的