SQL И / ИЛИ условия для двух таблиц - PullRequest
0 голосов
/ 10 января 2011

Предполагается, что у нас есть классы Person, Character и PersonCharacter и их соответствующая структура в следующей структуре данных и данных в базе данных MySQL.

table persons
[
  { id: 1, name: peter },
  { id: 2, name: mary },
  { id: 3, name: joe },
  { id: 4, name: paul },
  { id: 5, name: may },
]

table characters
[
  { id: 101, description: cheerful },
  { id: 102, description: nervous },
  { id: 103, description: greedy },
  { id: 104, description: sincere },
  { id: 105, description: naive },
  { id: 106, description: firm },
]

table person_characters
[
  {id: 1000, person_id: 1, character_id: 101},
  {id: 1001, person_id: 1, character_id: 103},
  {id: 1002, person_id: 1, character_id: 106},
  {id: 1003, person_id: 2, character_id: 102},
  {id: 1004, person_id: 2, character_id: 104},
  {id: 1005, person_id: 3, character_id: 102},
  {id: 1006, person_id: 3, character_id: 105},
  {id: 1007, person_id: 4, character_id: 104},
  {id: 1008, person_id: 5, character_id: 101},
  {id: 1009, person_id: 5, character_id: 106},
]

Как можно написать оператор SQL, если это возможно, с помощьюRails, что может выяснить это у людей, у которых есть конкретные персонажи?Например, люди с характером, как стойкие, так и веселые, могут быть и любопытны.

Вопрос кажется типичным, но в поисковых системах трудно найти ответ.

Ответы [ 2 ]

0 голосов
/ 10 января 2011

лиц, которые имеют особые символы?

Одна черта характера на запрос или несколько (например, «люди, которые являются одновременно« нервными »и« твердыми »)?

Если несколько, поместите параметры («нервный» и «твердый») в таблицу, затем используйте реляционное деление .

0 голосов
/ 10 января 2011
SELECT  persons.*
FROM    persons
  JOIN  person_characters
  ON    person_characters.person_id ON persons.id
    AND
      -- vvv Method one, we already have the character IDs: vvv
      person_characters.character_id IN (101,106)
      -- ^^^ /Method one ^^^

      -- vvv Method two, we need to look them up vvv
      person_characters.character_id IN (
        SELECT characters.id
        FROM   characters
        WHERE  characters.description IN ('cheerful','firm')
      )
      -- ^^^ /Method two ^^^

ПРИМЕЧАНИЕ используйте только один из этих операторов после AND внутри объединения. Я просто показываю любой подход (если у вас есть или у вас нет идентификаторов символов для поиска.

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