Соединение по первичному ключу, но в одной таблице ключи разделяются запятыми - PullRequest
0 голосов
/ 28 февраля 2020

Я новичок в SQL и не могу найти ничего по своей проблеме:

Это упрощение моей проблемы, но в основном у меня есть 2 таблицы, которые я хочу объединить в какой-то столбец, например ' fruit ', но в таблице 1 есть несколько строк, где фрукты разделяются запятыми в строке, есть ли способ объединить таблицы, как если бы фрукты были в разных строках для второй таблицы? (Я просто произвольно заполнил счет)

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

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Это может вам помочь, здесь я использовал функцию 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)

Ссылка Fiddle DB - Здесь

0 голосов
/ 28 февраля 2020

Вы никогда не должны присоединяться к текстовому столбцу, вы всегда должны добавлять идентификатор (целое число, которое будет вашим основным ключом), например,

TABLE 1
ID COUNT FRUIT
1 1 яблоко
2 2 ягоды
3 3 банана
4 1 апельсин

И для таблицы 2 одинаковые

для всех рядов, где у вас есть фрукты разделенные запятой, вы должны добавить дополнительную строку.

тогда, если, скажем, яблоко уже существует, вы можете либо сделать 2 вещи, посмотреть, существует ли яблоко и увеличить количество на 1, либо просто вставить еще одну строку с яблоком .

тогда, если вы хотите присоединиться к двум таблицам

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

Если вы хотите посчитать количество определенной пищи, используйте фунгицин SUM () в SQL

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