Вопрос

Есть запрос:

SELECT blalist FROM blatable WHERE blafield=714

который возвращает строку, которая выглядит как: «2,12,29,714,543,1719». И есть еще один запрос:

SELECT userid, name, surname, creditcardnum, items
    FROM stolencards WHERE userid IN
    (SELECT blalist FROM blatable WHERE blafield=714)

Теперь это не работает.
Мне удалось заработать его только, выполняя эти запросы отдельно. Что я должен сделать, чтобы сохранить его в одном запросе?

Это было полезно?

Решение

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

Поскольку у вас есть все значения в одной ячейке, делая IN Сравнение приводит к тому, что все пользователи сравниваются со строкой «2,12,29,714,543,1719», что, очевидно, не совпадает. Ваш запрос эффективно выглядит так:

...FROM stolencards WHERE userid IN ("2,12,29,714,543,1719")

Другие советы

Проверьте тип данных блалиста и пользователя, ими же, или блалистская действительно возвращает пользовательскую?

Если вы указали правильные типы данных и отношения PK и FK, попробуйте:

SELECT s.userid, s.name, s.surname, s.creditcardnum, s.items
FROM stolencards s inner join blatable b on s.userid = b.blafield
where b.blafield = 714
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top