Итак, у меня есть две таблицы в этом упрощенном примере: люди и дома.Люди могут иметь несколько домов, поэтому у меня есть поле People.Houses, которое представляет собой строку с разделителями запятых (например, «House1, House2, House4»).В домах может быть несколько человек, поэтому у меня есть поле Houses.People, которое работает одинаково («Сэм, Саманта, Дарен»).
Я хочу найти все строки в таблице People, соответствующиена имена людей в данном доме, и наоборот, для домов принадлежат людям.Но я не могу понять, как это сделать.
Это так близко, как я уже придумал:
SELECT People.*
FROM Houses
LEFT JOIN People ON Houses.People Like CONCAT(CONCAT('%', People.Name), '%')
WHERE House.Name = 'SomeArbitraryHouseImInterestedIn'
Но я получаю некоторые ложные срабатывания (например:Сэма и Саманту могут схватить, когда я просто захочу Саманту, а также с House3, House34 и House343, когда я хочу House343).
Я подумал, что мог бы попытаться написать функцию SplitString, чтобы разбитьstring (используя список разделителей) в набор и выполняйте некоторые подзапросы для этого набора, но функции MySQL не могут иметь таблицы в качестве возвращаемых значений.
Аналогично, вы не можете хранить массивы в виде полей, и из того, что я собираю, элементы в виде разделенных запятыми длинных строк кажутся обычным способом решения этой проблемы.
Я могу подуматьо некоторых других способах получить то, что я хочу, но мне интересно, если нет хорошего решения.