Как объединить все строки с одним и тем же именем в одну таблицу с помощью MYSQL?

0

Предположим, у меня есть база данных с названием clubmembership которой есть столбец для имен, столбец для клубов и столбец для той роли, которую они играют в этом клубе. Название Маргрит будет в колонке name много раз, или столько раз, сколько она в клубе. Если я хочу посмотреть, какие люди являются членами швейного клуба, мой запрос может выглядеть примерно так:

SELECT DISTINCT NAME FROM CLUBMEMBERSHIP
WHERE CLUB=SEWING
AND ROLE=MEMBER;

Моя проблема в том, что я не могу понять, кто не в швейном клубе. Конечно, простое предложение "не в" не работает, потому что есть много строк, в которых нет шитья. В этой базе данных, если кто-то не в швейном клубе, шитье не появляется под клубом, поэтому я полагаю, что есть способ присоединиться к различным строкам с тем же именем под "именем", а затем потенциально использовать предложение "не в"

Надеюсь, это было хорошим объяснением этого вопроса. Некоторое время я боролся с этой проблемой.

Спасибо за вашу помощь! Nicolle

  • 0
    Ваш вопрос не ясен .. пожалуйста, добавьте правильную выборку данных и ожидаемый результат
  • 0
    Я пытаюсь добавить его, но не могу добавить разрывы строк в комментариях и не могу отредактировать исходный вопрос.
Теги:

2 ответа

0

Это не то, что можно решить, просто изменив существующий код, это связано с дизайном базы данных.

Нормализация базы данных - это процесс сортировки вашей базы данных в разумные таблицы.

Если вы добавляете человека много раз, то вместо этого вы должны создать таблицу с именем members. И если есть список клубов, то вам следует создать таблицу clubs.

Затем вы можете создать таблицу, чтобы объединить их.

Вот ваши три стола:

members
-------
id (int)
name (varchar)

clubs
-------
id (int)
name (varchar)

memberships
-------
member_id (int)
club_id (int)

Затем вы можете использовать объединения в MySQL для возврата необходимой вам информации.

Qaru не любит внешние ссылки, так как ответ должен быть здесь, но это огромная тема, которая не вписывается в один ответ, поэтому я бы кратко прочитал о нормализации базы данных, а затем прочитал о "объединении таблиц".

  • 0
    На самом деле это проект, над которым я работаю, и нам дали базу данных, которая, как они признают, не очень хорошая, но, к сожалению, мы не можем ее изменить. Они сообщают нам информацию, которую нам нужно собрать, и это все.
  • 0
    Ах. Да, я не буду комментировать это, я уверен, что есть метод к безумию. Удачи!
0

Если вы правильно поняли, вы хотели бы перечислить все имена, которые не являются членами SEWING. Внутренний запрос получит все Имена, которые являются членами SEWING, однако оператор NOT EXISTS получит все Имена, которые не найдены во внутреннем запросе.

SELECT  DISTINCT C.NAME
FROM    CLUBMEMBERSHIP C
WHERE   C.ROLE = 'MEMBER'
        NOT EXISTS
        (
            SELECT NULL 
            FROM CLUBMEMBERSHIP D
            WHERE D.CLUB='SEWING' 
                    AND D.ROLE='MEMBER'
                    AND C.NAME = D.NAME
        )

Вот демо.

  • 0
    Эй, большое спасибо за ваш ответ! Я не совсем понимаю, откуда берутся C. и D.?
  • 0
    Они называются псевдонимами. Вы можете установить все, что вы хотите и полезно, вместо того, чтобы вводить полное имя таблицы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню