【问题标题】:Joining on primary key but in one table keys are separated by commas加入主键,但在一个表中,键用逗号分隔
【发布时间】:2020-02-28 14:27:55
【问题描述】:

我是 SQL 新手,在我的问题上找不到任何内容:

这是对我的问题的简化,但基本上我有 2 个表,我想在“水果”之类的列上加入,但表 1 有一些行,其中水果在行中用逗号分隔,有没有办法加入表格,就好像第二张桌子的水果在不同的行? (我只是随便填了count)

TABLE 1

count |       fruit | 

1     |  apple, berry

1     |  berry

1     | banana

1     | orange, banana

TABLE 2

count | fruit | 

1     |  apple

4     |  berry

15     | banana

11     | orange

【问题讨论】:

标签: mysql sql join


【解决方案1】:

这可能会对你有所帮助,我在这里使用了 find in set 函数进行内部连接,你可以轻松地加入 2 个逗号分隔值的表

表架构 -

CREATE TABLE Table1(
  count_val INT,fruit TEXT);

CREATE TABLE Table2(
  count_val INT,fruit TEXT);  

INSERT INTO Table1(count_val, fruit)
VALUES (1,'apple, berry'),(1,'berry'),(1,'banana'),
       (2,'orange, banana');

INSERT INTO Table2(count_val, fruit)
VALUES (1,'apple'),(1,'berry'),(1,'banana'),
       (2,'orange');       

Sql查询-

SELECT * FROM Table2 AS T2
INNER JOIN Table1 AS T1 ON find_in_set(T2.fruit,T1.fruit)

DB 小提琴链接 - Here

【讨论】:

    【解决方案2】:

    你不应该加入文本列,你应该总是在你的列中添加一个 ID(整数,这将是你的主键)

    表 1
    ID      计数     水果
    1              1                苹果
    2              2                 浆果
    3             3                 香蕉
    4              1                 橙色

    表 2 也一样

    对于所有以逗号分隔的有水果的行,您应该添加一个额外的行。

    如果假设苹果已经存在,你可以做两件事,看看苹果是否存在并将计数增加 1,或者简单地用苹果插入另一行。

    那么如果你想加入 2 个表

    SELECT T1.count, T1.fruit, T2.count, T2.fruit
    FROM table1 T1
    INNER JOIN table2 T2 ON T1.id = T2.id;
    

    如果要计算特定食物的数量,请在 SQL 中使用 SUM() 函数

    【讨论】:

    • 这不能回答问题。但是这个问题显然是重复的,所以应该关闭而不回答。 How to AskHow to Answerhelp center
    • 加入文本列没有错。毕竟,日期实际上只是一个附加了一些有趣规则的字符串。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2015-12-14
    • 2018-12-18
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多