SQL Это внешнее или внутреннее соединение и как присоединиться к массиву

Казалось простым, когда я начинал и делал это раньше, теперь я запутался сам и на блокпосту.

Имейте две таблицы: News_Table и People_Table. Под News_Table есть поле: News_People_Contributed, и оно имеет идентификаторы People_Table в формате массива (1,4,7,10), таким образом, четыре человека внесли свой вклад. Я создаю параметр поиска, который ищет News_Header AND News_People_Contributed, и не могу понять, как создать столбец поиска.

News_Table
News_ID
News_Header
News_People_Contributed

People_Table
People_ID
People_First_Name...

Это что-то вроде...

Select*
From News_Table
Left Join News_Table
On People_Table.People_ID IN (News_Table.News_People_Contributed)
Where Search_Param Like '%News_Header%' OR Search_Param Like '%People_First_Name%'

Проблема в том, что (News_Table.News_People_Contributed) — это строка, а идентификатор — нет. Кроме того, у меня могут не быть людей, внесших свой вклад и т. Д. Чтобы сделать проблему еще более сложной, я делаю это в MS Access вместо MySql, поэтому мне нужно кодировать sql «старой школы» для обхода.


person Brewy    schedule 23.03.2017    source источник
comment
News_People_Contributed имеет идентификаторы в виде строки, а не поля с несколькими значениями? Не понимаю, как вы могли сделать этот запрос раньше, если поле является строкой. Хранение в виде строки - очень плохой дизайн.   -  person June7    schedule 23.03.2017
comment
это было меню с множественным выбором, чтобы упростить его. В противном случае мне придется создать третью таблицу, связывающую две другие таблицы — сделать это до двух. Мне нравится использовать массивы, потому что это чище и проще выполнять циклы for для других элементов. Всегда можно разделить строку, чтобы вызвать массив.   -  person Brewy    schedule 23.03.2017
comment
Это плохая структура таблицы. У вас должна быть третья таблица, соединяющая две. Затем создайте запрос к трем таблицам и найдите его. Вы упомянули mysql, какое это имеет отношение к чему-либо?   -  person AVG    schedule 23.03.2017
comment
Ну и третья таблица с многозначным полем - вы ее просто не видите и не работаете с ней напрямую, потому что это скрытая системная таблица. Просмотрите поддержку .office.com/ru-ru/article/   -  person June7    schedule 23.03.2017
comment
Я упомянул MySql, потому что, поскольку Access не поддерживает некоторые языки SQL, которые поддерживает MySql, и с Access вы пишете запросы немного по-другому. Большинство людей на этом форуме отвечают истинным Sql применительно к базам данных MySql. Если вы знаете более старый доступ, вы знаете, что они очень похожи, но определенно не одинаковы. Я знаю, что 3-я таблица — это то, что нужно, но это также означает, что мне нужно запустить множественную вставку, где массив был проще. Спасибо за комментарии.   -  person Brewy    schedule 23.03.2017
comment
stackoverflow.com/questions/22327708 /   -  person nicomp    schedule 24.03.2017


Ответы (1)


Выполните перекрестное соединение и отфильтруйте совпадения в списке строк. Он ничего не говорит об эффективности или форме (как уже отмечалось), но он работает.

SELECT *
FROM News_Table, People_Table
WHERE InStr([News_People_Contributed],CStr([People_ID])) > 0;

Это решает только часть проблемы: присоединение — проблема, которой все обеспокоены в первоначальных комментариях. Недостаточно подробностей о Search_Parameter, чтобы предоставить помощь по этому вопросу. Предоставьте более подробную информацию, если вам нужна дополнительная помощь.

person C Perkins    schedule 25.03.2017