我的查询在其中有一个子查询,但它没有返回输出,但实际上它必须提供一些输出,因为我手动检查并输出存在。我已经发布了下面的查询。
select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id
from mso_charter.mac
join record on mac.record_id = record.record_id
where mac.mac_type='ethB' and record.soc_id IN (select soc from d);
示例数据在
之下 mac_id mac1 mac_type record_id--- for table mac
1 6142 ethA 1
2 6412 ethB 1
3 2313 ethC 1
record_id soc_id ---- for table record
1 Qu132
1 as432
1 342aq
soc --- for table d
a12w2
23we
qw12
mso_charter是模式名称mac,d和record是表名。
答案 0 :(得分:0)
请注意,您的子查询实际上仍然是一个连接,可以这样写:
select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id
from mso_charter.mac
join record using(record_id)
join d on record.soc_id = d.soc
where mac.mac_type='ethB';
根据评论,我们仍然需要一个数据集来重现和帮助。
答案 1 :(得分:0)
您的record.soc_id
都没有与d.soc_id
的任何人匹配。所以你没有排。
另外,你写select soc from d
。 soc
,而不是soc_id
。错字或错误?
答案 2 :(得分:0)
应该从d中选择soc_id而不是选择select soc from d
答案 3 :(得分:0)
根据您的示例数据,d
有一列soc_id
。这应该用于比较:
select m.mac_id, m.mac1, m.mac_type, r.soc_id
from mso_charter.mac m join
record r
on m.record_id = r.record_id
where m.mac_type = 'ethB' and
r.soc_id in (select d.soc_id from d);
由于国际字符,隐藏字符,错误位置的空格等等,ids看起来可能相同但不一样。
如果这不起作用,请尝试以下方法:
soc_id
条件并查看是否有任何行符合第一个条件join
。where
子句以查看是否与join
匹配。答案 4 :(得分:0)
所以,感谢所有在这种情况下帮助我的人。我实际上犯了一个非常愚蠢的错误。我发布正确答案的原因可能是因为如果将来其他人陷入这样的问题或类似的事情,那么对他们有帮助。
select m.mac_id,m.mac,m.mac_type,r.soc_id
from mso_charter.mac m
join mso_charter.record r on m.record_id = r.record_id
where m.mac_type = 'ethB' and r.soc_id IN (select d.soc_id from d);
错误是我在执行连接时没有提到模式名称,并且在其他模式中有多个名为record的表,只是出于挫折我们往往会忘记让我花费几个小时来完成工作的小事情