SQLite 3 に移植したい次の SQL Server クエリがありますが、気に入らず、"near (".
いくつかのデバッグの後、問題は、SQLite がサブクエリ エイリアスの後の列指定子を好まないことにあるようです (これらを二重アスタリスクで示しました)。
このクエリを SQLite で動作させるにはどうすればよいですか?
SELECT rowSet.DBId_0,
rowSet.TableID_0,
CASE WHEN rowSet.HasIdentity_0 != rowSet.HasIdentity_1 THEN 1 ELSE 0 END 'Result'
FROM (
SELECT *
FROM
(
SELECT 'Master' AS 'Db', z.[DBId], z.[TableId], MAX(z.[MaxIdentity]) AS 'HasIdentity'
FROM
(
SELECT so.[DBId], sc.[TableId], MAX(CAST(sc.[Identity] AS TINYINT)) AS MaxIdentity
FROM syscolumns sc
JOIN sysobjects so ON sc.[tableid] = so.[id]
WHERE so.[dbid] = 1
GROUP BY so.[DBId], sc.[TableId], sc.[Identity]
) z
GROUP BY z.[DBId], z.TableId
) **src (Db_0, DBId_0, TableID_0, HasIdentity_0)**
JOIN
(
SELECT 'Target' AS 'Db', z.[DBId], z.[TableId], MAX(z.[MaxIdentity]) AS 'HasIdentity'
FROM
(
SELECT so.[DBId], sc.[TableId], MAX(CAST(sc.[Identity] AS TINYINT)) AS MaxIdentity
FROM target.syscolumns sc
JOIN target.sysobjects so ON sc.[tableid] = so.[id]
WHERE so.[dbid] = 1
GROUP BY so.[DBId], sc.[TableId], sc.[Identity]
) z
GROUP BY z.[DBId], z.TableId
) **tar (Db_1, DBId_1, TableID_1, HasIdentity_1)** ON tar.[DBId_1] = src.[DBId_0] AND tar.[TableId_1] = src.[TableId_0]
) rowSet
試すことができるサンプルクエリを次に示します。
これは機能します(SQLiteで):
select col1, col2
from
(
select 1 as 'col1', 2 as 'col2'
union
select 3 as 'col1', 4 as 'col2'
)
これは(SQLiteでは)そうではありません:
select col1, col2
from
(
select 1 as 'col1', 2 as 'col2'
union
select 3 as 'col1', 4 as 'col2'
) z (col1, col2)