Выделите строки в одной таблице на основе идентификатора, который отображается в столбце другой таблицы И имеют несколько совпадений на основе другого столбца. - PullRequest
0 голосов
/ 26 февраля 2019

Это очень сложный вопрос для меня, поэтому название может потребовать пересмотра.Но вот моя ситуация:

Мне нужно выбрать все строки из таблицы узлов, которые содержат строку в field_data_field_incident_type, где entity_id соответствует nid, и несколько field_incident_type_tid, которые имеют тот же entity_id, что и nid.Это некоторые примеры данных из таблиц enter image description here

Например, запрос, который я хотел бы сделать, - это выбрать все узлы из узла, которые имеют оба field_incident_type_tid 66 и 64, которые должны возвращатьстроки с nid 98603 и 98612 из таблицы узлов.Прямо сейчас я делаю это с левыми соединениями, как это

SELECT nid
FROM node
left JOIN field_data_field_incident_type field_data_field_incident_type
    ON node.nid = field_data_field_incident_type.entity_id
left JOIN field_data_field_incident_type field_data_field_incident_type_2
    ON field_data_field_incident_type_2.entity_id = node.nid
 WHERE field_data_field_incident_type.field_incident_type_tid = 66
   AND field_data_field_incident_type_2.field_incident_type_tid = 64
;

, это работает, но это объединение создает каждую перестановку инцидентов_типа и становится безумным, если я продолжаю добавлять больше требований для инцидента_тид. Есть лучший способсделать это?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

ВЫБРАТЬ отдельный узел. *, Field_data_field_incident_type.field_incident_type_tid ОТ узла JOIN field_data_field_incident_type field_data_field_incident_type ON node.nid = field_data_field_incident_type.entity_id

0 голосов
/ 26 февраля 2019

Стандартный подход выглядит следующим образом:

SELECT c.olumns
     , y.ou
     , a.ctually
     , w.ant
  FROM node c
  JOIN field_data_field_incident_type y
    ON y.entity_id = c.nid 
 WHERE y.field_incident_type_tid IN(66,64)
 GROUP 
    BY c.nid 
HAVING COUNT([DISTINCT] y.field_incident_type_tid) = 2 -- WHERE '2' is equal to the number of arguments in IN().

Пожалуйста, оставляйте любые комментарии о синтаксических ошибках при себе.

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