【发布时间】:2015-01-30 20:02:28
【问题描述】:
我们有 2 张桌子;表 1,表 2。
table1:
CNTY | ZIP | SERVICE 111 | 1234 | N 111 | | Y 112 | | Ytable2:
CNTY | ZIP | 111 | 1234 | 111 | 4321 | 112 | 4433 |
我们正在使用 oracle 并尝试以下查询 -
SELECT t1.SERVICE
FROM table1 t1
WHERE t1.CNTY IN (SELECT t2.CNTY
FROM table2 t2
WHERE t2.ZIP = '4433')
返回 Y,这是预期的行为。但是如果我们发送t2.zip='4321',它会返回 2 行,但我们期望的是 1 行 (Y)。另外,如果我们发送t2.zip='1234' 应该返回'N'。但是,上面的查询返回 2 行。
我是数据库方面的新手。我们尝试过,但无法在一个单一的声明中得到它。有没有办法获得预期的行为?
基本上我对查询的期望是 -
- 它应该始终从
table1返回SERVICE值。如果它在table1中找到ZIP,它应该返回匹配zip 的SERVICE值。 - 如果在
table1中没有匹配的ZIP,那么它应该在table2中找到与给定zip 关联的CNTY,然后从table2中获取CNTY值,它应该找到SERVICE中的table1值用于匹配CNTY并返回该值。
例如:对于 ZIP 4321,table1 中没有匹配的条目,但 table2 中的 4321 与 111 相关联,因此对于 table1 中的 111,SERVICE 值为 Y。因此,查询应返回 Y。
【问题讨论】:
标签: java sql oracle hibernate oracle10g