Проблема ограничения перекрестного выбора в MySQL - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть две таблицы.

T1 имеет один столбец, который имеет 9000 уникальных записей (varchar).

T2 имеет много столбцов с числом записей более 1 миллиона.Один из столбцов T2.x T2 содержит данные из столбца T1 T1.x, однако некоторые записи T2 содержат в своем столбце T2.x данные, которых нет в столбце T1 T1.x.T2.x также может иметь значение NULL.

Я хочу перечислить все записи T2, где T2.x имеет запись, которая соответствует T1.x

I tried = SELECT t1.column_x, t2.* from t1, t2 WHERE x = t1.x

Однако это толькоперечисляет 9000 записей, игнорируя многие другие, которые существуют в T2.

Как мне достичь того, что я ищу?

e.g.

**t1 [x]
===**
a
b
c

**t2
===**     [x]
1 .. .. .. a
2 .. .. .. b
3 .. .. .. eee
4 .. .. .. NULL
5 .. .. .. c
6 .. .. .. a
7 .. .. .. c

Хочу получить: 1-2-5-6-7

Спасибо.

1 Ответ

1 голос
/ 23 февраля 2012

Проще говоря, будет работать следующее, хотя это приведет к проблемам с производительностью таблицы такого размера, учитывая, что оба столбца x являются VARCHAR.

SELECT
    t2.*
FROM t2
INNER JOIN t1
ON t1.x = t2.x

Есть ли у вас индекс для столбца xуже в t1 и t2, как будто это поможет улучшить скорость запроса.Я бы рекомендовал НЕ запускать этот запрос в производственной среде.Если это неизбежно, я бы рекомендовал включить LIMIT 10 (или столько строк, сколько вам нужно), чтобы ограничить влияние.

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