Объединение двух таблиц SQL в запросе - PullRequest
2 голосов
/ 18 января 2011

У меня есть две таблицы (с одной и той же схемой)

Table1
id   title   D0    D1    D2    D3
------------------------------------
1    Title1  0.12  3.23  4.90 -0.12
1    Title1  0.22  0.32 -4.90  0.12
1    Title1  0.13  1.24  3.50 -0.22
...
1    TitleN  1.22  2.33  3.90 -1.56

и

Table2
id   title   D0    D1    D2    D3
------------------------------------
1    Title1  1.42 -0.93 -2.99  3.22
1    Title1  0.52  3.32 -4.90  0.54
1    Title1  2.13  1.14  3.50 -0.22
...
1    TitleN  3.42  4.37  3.90 -1.26

Я пытаюсь выяснить, как выполнить запрос, как можно сделать эту математику:

SELECT title FROM Table2 WHERE (Table1_Row1_D0*Table2_Row1_D0)+(Table1_Row1_D1*Table2_Row1_D1)+(Table1_Row1_D2*Table2_Row1_D2) < 0.5;

Однако я бы хотел, чтобы запрос повторялся по строкам Таблицы1 и выполнял SELECT для всей Таблицы2.По сути, я хочу выбрать заголовки из Таблицы 2, где выполняется неравенство в отношении ВСЕХ комбинаций строк Таблицы 1 и Таблицы 2.

Возможно ли это?

Не уверен, что это имеет значение,но я использую Postgre.

Ответы [ 3 ]

2 голосов
/ 18 января 2011

По сути, я хочу выбрать заголовки из Таблицы2, где выполняется неравенство вычислений по ВСЕМ комбинациям строк Таблицы1 и Таблицы 2.

Для этого вам понадобится обратное условиегде в таблице Table1 НЕ существует равенства для этой строки таблицы 2.

SELECT distinct title
FROM Table2
WHERE NOT EXISTS (
    SELECT *
    FROM Table1
    WHERE (Table1.D0*Table2.D0)+(Table1.D1*Table2.D1)
            +(Table1.D2*Table2.D2) >= 0.5
)
1 голос
/ 18 января 2011

Вам понадобится CROSS JOIN

SELECT Table2.title 
FROM Table2 
CROSS JOIN Table1
WHERE (Table1.D0*Table2.D0)+(Table1.D1*Table2.D1)+(Table1.D2*Table2.D2) < 0.5;
0 голосов
/ 18 января 2011

Вы должны использовать союз. Единственное предостережение - ваши возвращаемые поля из выбранных вами полей должны соответствовать

 (SELECT * FROM Table1 WHERE conditions) UNION (SELECT * FROM Table2 WHERE conditions)

Проводите проверки на стороне сценария, пока вы не извлекаете слишком много данных. У вас также есть возможность добавить подвыборки к условию where, чтобы ограничить обе стороны этого запроса объединения.

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