SQLite: Как создать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, включающее 3 таблицы и 2 «конечные точки»? - PullRequest
0 голосов
/ 04 октября 2018

Я понимаю базовую концепцию ВНУТРЕННИХ СОЕДИНЕНИЙ, но у меня возникают проблемы с этим конкретным случаем (следующие три таблицы: PK = первичный ключ, FK = внешний ключ) -:

tbl_goal_context (many-to-many table)
rowId(PK)  |  goalRowId(FK)  |  contextRowId (FK)  |
1          |  2              |  5                  |
tbl_context_items
rowId(PK)  |  ...  |
5          |  ...  |
tbl_context_categories_items (many-to-many table)
rowId(PK)  |  catRowId(FK)  |  itemRowId(FK)  |
1          |  3             |  5              |

Я пытаюсь перечислить строки из tbl_context_items, которые связаны через две таблицы многие-ко-многим, где известны catRowId и goalRowId.

Так, например, скажем, я хочу вытащить всестроки из tbl_context_items, которые подключены к goalRowId = 2 и catRowId = 3.

Вот моя попытка (с использованием приведенных выше примеров), которая дает мне ошибку: «Ошибка: неоднозначное имя столбца: tbl_goal_context.goalRowId Невозможно выполнить оператор "

SELECT tbl_context_categories_items.itemRowId, tbl_context_categories_items.catRowId, tbl_goal_context.goalRowId, tbl_goal_context.contextRowId, tbl_context_items.rowId AS rowId, tbl_context_items.shortText AS shortText, tbl_context_items.userMade AS userMade
    FROM tbl_context_categories_items
    INNER JOIN tbl_goal_context ON tbl_goal_context.contextRowId = tbl_context_items.rowId
    INNER JOIN tbl_goal_context ON tbl_context_categories_items.itemRowId = tbl_context_items.rowId
    WHERE tbl_context_categories_items.catRowId = 3
        AND tbl_goal_context.goalRowId = 2
    ORDER BY tbl_context_items.shortText ASC

ВНУТРЕННИЕ СОЕДИНЕНИЯ здесь не совсем уместны?Нужен ли подзапрос?

1 Ответ

0 голосов
/ 05 октября 2018

Неоднозначность заключается в том, что вы присоединяетесь к tbl_goal_context дважды (таким образом, 2 набора идентичных имен столбцов и, следовательно, двусмысленность).

Объединения будут более похожи на: -

FROM tbl_context_categories_items
    INNER JOIN tbl_context_items ON tbl_context_categories_items.itemRowid = tbl_context_items.rowid
    INNER JOIN tbl_context_categories ON tbl_context_categories_items.catRowid
    INNER JOIN tbl_goal_context ON tbl_context_items.rowid = tbl_goal_context.contextRowid
    INNER JOIN tbl_goal_items ON tbl_goal_context.goalRowid = tbl_goal_items.rowid

Это объединяет все таблицы в соответствии с диаграммой (хотя последнее JOIN не требуется для запроса, поскольку вы не включаете столбцы из tbl_goal_items ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...