我有以下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
提前致谢
答案 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)