子句中的两列在where子句中

时间:2015-03-25 11:57:26

标签: sql postgresql

我有一个问题:

SELECT s.period, s.year, s.amount 
FROM salaries s

我想从salaries表中选择时段和年份等于的行:

SELECT p.period, p.years 
FROM periods p

我知道最简单的方法是使用join,但问题是 - 在应用程序中我只能在WHERE之后添加一个子句

所以解决方案应该是:

SELECT s.period, s.year, s.amount 
FROM salaries s 
WHERE ...

这可能吗?

修改 结果应与:

相同
SELECT s.period, s.year, s.amount 
FROM salaries s
  JOIN periods p ON s.period = p.period AND s.year = p.year

3 个答案:

答案 0 :(得分:5)

您可以为IN条件使用多个列:

SELECT s.period, s.year, s.amount 
FROM salaries s
where (s.year, s.period) in (select year, period from periods)

但戈登的not exists解决方案可能更快。

答案 1 :(得分:1)

这适用于您的环境吗?

WHERE EXISTS (SELECT 1
              FROM periods p
              WHERE p.period = s.period AND p.year = s.year
             )

答案 2 :(得分:0)

试试这个:

SELECT s.period, s.year, s.amount FROM salaries s
where s.period in (select period from periods)
and s.year in (select year from periods)