2012-11-26 81 views
1

有人可以帮助我,我有2个表EXISTS IN查询如何?

financeaccountcurrencymapping和ownedac​​count。

我想选择那些其字段legalEntity_id是something的financeaccountcurrencymapping。

这是我到目前为止。

SELECT 
FROM financeaccountcurrencymapping 
WHERE ownedAccount_id EXISTS IN (
       SELECT id 
       FROM ownedaccount 
       WHERE legalEntity_id = ??); 

在表中的字段有:

'financeaccountcurrencymapping'

  • ID
  • moneyCurrency
  • accountForCash_id
  • ownedAccount_id

'ownedac​​count'

  • ID
  • legalEntity_id
  • assetOrLiability
  • assetType
  • depositoryType
  • liabilityType
  • multipleCurrency
  • 货币
  • 描述

回答

4

你不会使用EXISTS在这种情况下。独自一人就可以工作。

SELECT 
FROM financeaccountcurrencymapping 
WHERE ownedAccount_id IN (SELECT id FROM ownedaccount WHERE legalEntity_id = ??); 
+0

从SELECT更改为DELETE。 – Tom

1
SELECT legalEntity_id 
FROM financeaccountcurrencymapping 
WHERE ownedAccount_id IN (
       SELECT id 
       FROM ownedaccount 
       WHERE legalEntity_id = ??); 
+0

谢谢你的时间 –

1

你原来的查询是非常接近。你只需要删除EXISTS,像这样:

SELECT * 
FROM financeaccountcurrencymapping 
WHERE ownedAccount_id IN (
       SELECT id 
       FROM ownedaccount 
       WHERE legalEntity_id = ??); 

或者,你可以写这个查询与JOIN对于相同的有效结果。

SELECT f.* 
FROM financeaccountcurrencymapping AS f 
INNER JOIN ownedaccount AS o ON (f.id = o.ownedAccount_id) 
WHERE o.legalEntity_id = ??; 
1

如果你真的想使用EXISTS或想看看它是如何使用的例子,我认为下面会工作。就我个人而言,我可能会使用IN。

SELECT 
FROM financeaccountcurrencymapping as f 
WHERE EXISTS (SELECT id 
       FROM ownedaccount 
       WHERE f.ownedAccount_id = id AND legalEntity_id = ??); 
+0

而不是SELECT,使用DELETE。 – Tom