从子表中的外键获取“name”属性的内部连接

wnavrhmk  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(292)

我有以下表格:

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);


我要做的是搜索 IT_TagIT_TAGS 表并返回一个基于存储在中的键的购物车名称 it_tags . name属性所在的位置 cart.name .
假设表设置正确,返回所需数据的正确(再次假设)内部联接是什么?

xytpbqjk

xytpbqjk1#

如果我知道你需要什么,我可以

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

当然,搜索部分可能与equals不同。
你可能需要一个 LIKE 接线员什么的。。。

brc7rcf0

brc7rcf02#

通过多个查询可以得到结果
与where子句联接

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

不带where子句的join

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

deliverd表/子查询联接方法

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'
)

仅限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

相关问题