我试图像下面SQL IN子句 - 空集
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
然而,当SELECT col1 FROM tbl1
返回任何结果,我想显示从TBL的所有结果
像这样的事情
的可能性IF(SELECT col1 FROM tbl1)
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl
我试图像下面SQL IN子句 - 空集
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
然而,当SELECT col1 FROM tbl1
返回任何结果,我想显示从TBL的所有结果
像这样的事情
的可能性IF(SELECT col1 FROM tbl1)
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl
您可以添加NOT EXISTS()
声明。虽然这种解决方案不会对大型数据集的高效,所以更有效的方法,你可以使用PL/SQL
SELECT * FROM tbl
WHERE col IN(SELECT col1 FROM tbl1)
OR NOT EXISTS(SELECT 1 FROM tbl1)
它似乎是一个简单的解决方案。但我不明白“这个解决方案对于大量数据不会有效”?还有其他方法可以提高效率吗? –
是的,'PL/SQL'做类似于你要求的东西,但那是另一回事。只要你有适当的索引,这应该是好的。 – sagi
你寻找SQL解决方案还是PL/SQL解决方案?你的问题的文字听起来像你正在寻找一个SQL解决方案,但标签包含PL/SQL。 –