我是db世界的新手,我正在尝试进行第一次查询。
我有两个表,我需要将第一个表中columnA
的值与第二个表中columnB
的值进行比较。
我想知道columnA
中columnB
中的值是什么。这两列都是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
答案 0 :(得分:0)
您的两个查询都很好看。你可以在where子句中添加更多条件,使其工作。
示例:
select *
from tableA
join tableB
on (upper(trim(tableA.columnA)) = upper(trim(tableB.columnB)));
修剪将减少额外的空格,而上部将使搜索不敏感。
希望这会有所帮助。
答案 1 :(得分:0)
我想知道
columnA
中columnB
中的值是什么。
严格地说,这个查询是一个正确(快速)的查询来实现你的要求:
SELECT DISTINCT columnA
FROM tableA a
WHERE EXISTS (SELECT 1 FROM tableB WHERE columnB = a.columnA);
但是你的查询都不应该返回空集。可能有空格或其他隐形字符欺骗你。测试:
SELECT * FROM tableA WHERE columnA = 'EF6940BN';
SELECT * FROM tableB WHERE columnB = 'EF6940BN';
答案 2 :(得分:0)
我尝试了你所有的建议,但没有人工作。
所以我尝试在另一个postgre上运行代码,并且我上面写的代码相同。
我不明白为什么,postgre的版本是相同的