帮助构建SQL查询

时间:2010-10-07 07:58:57

标签: sql sqlite

我有以下2个表

Channels:
Id int PK
Title varchar

SubChannels:
ChannelId int
SubchannelId int

当我从服务接收数据时,我试图将其持久化为SQL。我收到一些Channel实例,所以我将它存储在Channels表中,之后我试图保留每个子通道(每个通道包含子通道列表),因此,我将子通道存储在同一个表Channels中,并存储它们的ID SubChannel表格如下:ChannelId - SubChannelId。

所以,我需要通过一个查询来获取这个频道树 我正在尝试使用此查询执行此操作:

 SELECT * FROM Channels 
 EXCEPT 
 SELECT Channels.Id, Channels.Title 
 FROM Channels INNER JOIN SubChannels 
 ON Channels.Id = SubChannels.SubchannelId

但我的工作不正常。使用MSSQL它工作正常,但在我的SQLite中出现了问题。

你能帮我解决这个问题,或者建议我用其他方法将这个树存储在SQL中。

我的频道类看起来像这样:

int Id
string Title
List<Channel> SubChannels

提前致谢

2 个答案:

答案 0 :(得分:1)

你可以尝试一下:

SELECT Id, Title
  FROM Channels
EXCEPT 
SELECT Channels.Id, Channels.Title
  FROM Channels
 INNER JOIN SubChannels
    ON Channels.Id = SubChannels.SubchannelId

(即,不选择*

优化它的方法:

SELECT Id, Title
  FROM Channels
 WHERE Id NOT IN (
       SELECT DISTINCT SubchannelId
         FROM SubChannels
    )

答案 1 :(得分:-1)

SQLite不支持EXCEPT

所以你可以试试:

SELECT * FROM Channels  c1
WHERE NOT EXISTS(SELECT 1 
      SELECT Channels.Id, Channels.Title 
      FROM Channels c2 INNER JOIN SubChannels 
      ON Channels.Id = SubChannels.SubchannelId
      WHERE c1.Id = c2.Id
        AND c1.Title =c.Title)
相关问题