【问题标题】:sql query to find record that contains IDs of other records in the same Oracle tablesql查询查找包含同一Oracle表中其他记录ID的记录
【发布时间】:2015-05-14 14:19:04
【问题描述】:

我需要对 Oracle 11 数据库运行 SQL 查询,该数据库将检索记录,其中一条记录本身在单独的列下具有值,这些列保存同一个表中一个或多个其他记录的自动生成的 ID。

因此,表中的记录如下所示:

| FOREIGN_PARTY_ID | ORG_NAME | RELATED_PARTY_ID1 | RELATED_PARTY_ID2 | ...
| 1001             | null     | null              | null              | ...
| 1002             | null     | null              | null              | ...
| 1003             | null     | null              | null              | ...
| 1004             | null     | null              | null              | ...
| 1005             | ABC, INC. | 1001             | 1002              | 1003      | 1004

【问题讨论】:

  • 可能是 UNION (docs.oracle.com/cd/B19306_01/server.102/b14200/queries004.htm) 是您正在寻找的。但是如果你提供一个更详细的例子会更好......
  • 我很抱歉,应该补充一下。输出将以 primefaces 形式显示,输出标签及其各自的输入字段包含通过该查询从数据库中检索到的信息。因此,例如,输出标签/输入字段将是 Organization : ABC, INC.,另一个将是 First Name : John Last Name : Doe,等等...返回的记录将存储在一个列表中,然后我将从该列表中填充 primefaces 表单上的相应字段。我希望这会有所帮助!
  • 感谢两位的回复。 @Trinimon:我会查看链接。再次感谢!

标签: sql oracle


【解决方案1】:

此查询将返回表中的所有行,其中至少包含一个 RELATED_PARTY_IDn 字段中的 FOREIGN_PARTY_ID 自动生成的 ID:

SELECT
  t.*, 
  t1.*, /* actually, you can specify only fields you need */
  t2.*, 
  ...,
  tn.*
FROM YOUR_TABLE_NAME t
LEFT JOIN YOUR_TABLE_NAME t1 ON t1.RELATED_PARTY_ID1 = t.FOREIGN_PARTY_ID
LEFT JOIN YOUR_TABLE_NAME t2 ON t2.RELATED_PARTY_ID2 = t.FOREIGN_PARTY_ID
...
LEFT JOIN YOUR_TABLE_NAME tn ON tn.RELATED_PARTY_IDn = t.FOREIGN_PARTY_ID
WHERE
    t1.FOREIGN_PARTY_ID IS NOT NULL 
 OR t2.FOREIGN_PARTY_ID IS NOT NULL 
 OR ...
 OR tn.FOREIGN_PARTY_ID IS NOT NULL 

如果您只想在 EVERY RELATED_PARTY_IDn 字段中获取包含您的 ID 的行,您可以将 WHERE 条件中的 OR 更改为 AND

【讨论】:

  • 非常感谢您! “挑战”是这些 RELATED_PARTY_ID 字段中的所有或一个或多个字段可能为空。最终用户可以选择不输入任何数据,或者填写一个或多个字段(与 RELATED_PARTY_ID 相关),因此这些字段中的任何一个都可以为空,或者其中包含数据。换句话说,这不是一件简单的事情,将填写所有或不填写任何字段。无论如何,在 Trinimon 使用 UNION 的建议和现在您上面的详细信息之间,我有一些想法可以解决。再一次感谢你!!!!! :-)
  • 嗨@denied,还有一个问题。您的查询有效,除了我还需要一条记录 - 一条包含来自其他记录的 FOREIGN__PARTY_IDs 的 RELATED_PARTY_IDn id。如果您回到我的原始图表,那是 FOREIGN_PARTY_ID 为 1005 和 ORG_NAME 为 ABC, INC. 的行。我将其称为“主”行,因为从本质上讲,它在该“主”行的 RELATED_PARTY_IDn 列之一下具有其他行的 FOREIGN_PARTY_IDn。再次感谢!
猜你喜欢
  • 2018-07-13
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2019-06-13
相关资源
最近更新 更多