Я бы написал этот запрос следующим образом:
SELECT i.CharId AS CharId, i.ItemId AS ItemId
FROM INVITEM as i INNER JOIN SHOPITEM AS s USING (ItemId)
WHERE i.ItemId = 3;
Я использую синтаксис USING (ItemId)
, который является делом вкуса. Это эквивалентно ON (i.ItemID = s.ItemID)
.
Но я решил эту двусмысленность, квалифицировав i.ItemID
в предложении WHERE
. Вы можете подумать, что в этом нет необходимости, поскольку i.ItemID = s.ItemID
. Они оба равны по коммутативности, поэтому нет никакой смысловой двусмысленности. Но, очевидно, SQLite недостаточно умен, чтобы это понимать.
Я не люблю использовать NATURAL JOIN
. Это эквивалентно равному объединению каждого столбца , который существует в обеих таблицах с одинаковыми именами. Мне не нравится использовать это, потому что я не хочу, чтобы он сравнивал столбцы, с которыми я этого не хочу, просто потому, что они имеют одинаковые имена.