Внутреннее объединение для получения свойства name из внешнего ключа в дочерней таблице - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующие таблицы:

CREATE TABLE lookup.cart
(
    id int(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name varchar(100) NOT NULL
);

CREATE TABLE lookup.it_tags
(
    id int(10) unsigned PRIMARY KEY NOT NULL AUTO_INCREMENT,
    cart_id int(10) unsigned NOT NULL,
    it_tag varchar(25) NOT NULL,
    CONSTRAINT it_tags_ibfk_1 FOREIGN KEY (cart_id) REFERENCES lookup.cart (id) ON DELETE CASCADE
);
CREATE INDEX pn_cart_index ON lookup.it_tags (cart_id);

diagram

Что я хочу сделать, это поиск в базе данных по IT_Tag из IT_TAGS таблица и возврат с именем корзины на основе на ключе, хранящемся в it_tags.Где свойство name находится в cart.name.

При условии, что мои таблицы настроены правильно, каково правильное (при условии еще раз) внутреннее соединение, чтобы вернуться с моими желаемыми данными?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Результаты возможны с несколькими запросами

ПРИСОЕДИНИТЬСЯ С предложением WHERE

SELECT 
 *
FROM 
 cart 
INNER JOIN 
 it_cart 
ON
 cart.id = it_cart.cart_id
WHERE
  it_cart.it_tag = 'tag'

СОЕДИНИТЬСЯ без предложения WHERE

SELECT 
 *
FROM 
 cart 
INNER JOIN 
 it_cart 
ON
     cart.id = it_cart.cart_id
  AND
     it_cart.it_tag = 'tag'

Доставить таблицу / подзапрос JOIN метод

SELECT
 *
FROM (
      SELECT
         cart_id
       FROM
         it_cart 
       WHERE
         it_cart.it_tag = 'tag'

) AS it_cart 
INNER JOIN
 cart
ON
 it_cart.cart_id = cart.id

С оператором IN

SELECT 
 *
FROM 
 cart 
WHERE
 cart.id IN (
   SELECT
     cart_id
   FROM
     it_cart 
   WHERE
     it_cart.it_tag = 'tag'
)

Общие выражения таблицы WITHТолько для AS MySQL 8.0+

WITH it_cart_cte AS (
  SELECT
     cart_id
   FROM
     it_cart 
   WHERE
     it_cart.it_tag = 'tag'
)
SELECT 
 *
FROM 
 cart 
JOIN 
 it_cart_cte 
ON
 cart.id = it_cart.cart_id
0 голосов
/ 20 сентября 2018

Если я понимаю, что вам нужно, запрос может быть

SELECT c.name
FROM cart c
INNER JOIN it_tags t ON c.id = t.cart_id
WHERE it_tag = <what you need>

Естественно, что часть поиска может отличаться от равной.
Вам может понадобиться оператор LIKE или что-то еще ...

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