我有3个表:KeyWords,GrantsKeyConn,Grants。它的设置方式,每个“grant”都有关联的“关键字”,它们存储在KeyWords表中:
每个“关键字”都与GrnatsKeyConn表中的特定“grant”关联/连接:
...以便多个“关键字”可以关联/连接到一个“授权”。最后,每个“grant”都存储在Grants表中:
我正在尝试通过在文本框中指定关键字来过滤赠款。所以,假设我指定了关键字“test,new,final”......那么结果只会过滤掉那些与之关联的关键字;它不必导致只有3个与之关联的关键字的授权;它可以导致包含1,2,3,...的授权,指定所有关键字。 此外,如果授权中有超过1个与之关联的关键字,我不希望它在结果中显示多次。
那我该怎么做这个查询呢?我不想从KeyWords表中选择以获取关键字的ID,然后使用该ID进入GrantsKeyConn表以获取相关的授权,然后转到Grants表以提取正确的授权。如果是这样,我该怎么做?
如果我需要进一步澄清我的问题,请告诉我。
答案 0 :(得分:2)
您可能想要做这样的事情
select * from grants g, grantsKeyConn gKC where g.id = gKC.grantsId and gKC.KeyWordsID in (select id from KeyWords where KeyWord in ('new','final','test');
问题在于,如果您要搜索具有多个键的授权,您将获得多个结果。你可以将它增强为类似......
select DISTINCT(g.id) from ....
然后将其传递给另一个电话。
另一种选择是使用像hibernate这样的东西,让它为你映射一切。
答案 1 :(得分:1)
你可以用这个:
SELECT
--Choose the columns you want here
FROM
Grants
INNER JOIN GrantsKeyConn ON Grants.ID = GrantsKeyConn.GrandsID
INNER JOIN KeyWords ON GrantsKeyConn.KeyWordsID = KeyWords.ID
WHERE
--Filter here
ORDER BY
--Order here
如果您需要更多帮助,请与我们联系。 这将返回所有链接,但由于它看起来像一个非常大的表,只需查询您实际使用的列。
此外,如果您想知道如何从C#查询数据库,那么您有很多选择。 您可能会发现this很有用。