|
|
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
Теория: в таблице "а" некие объекты, в таблицах "b" и "c" содержат свойства объектов. Нужно выбрать объекты у которых есть набор определенных свойств одновременно. Объектов 200 000, свойств в одного 30 шт. CREATE TABLE `a` ( `id` int(10) ); INSERT INTO `a` (`id`) VALUES (1), (2); CREATE TABLE `b` ( `a_id` int(10), `num` int(10) ); INSERT INTO `b` (`a_id`, `num`) VALUES (1, 3), (1, 4), (2, 3); CREATE TABLE `c` ( `a_id` int(10), `num` int(10) ); INSERT INTO `c` (`a_id`, `num`) VALUES (1, 6), (1, 7), (2, 6); Таблицы "b" и "c" имеют связь с таблицей "а" по полю "a_id". 1. Цель выбрать id из таблицы "а", где в таблице "b" есть num=3 и num=4. Т.е. должно выбраться только id=1. 2. Цель выбрать id из таблицы "а", где в таблице "b" есть num=3 и в таблице "с" num=6 и num=7. Т.е. должно выбраться id=1. Подсказали решение, но имхо очень тяжелое для железа (30 свойств = 30 JOIN): SELECT * FROM a JOIN (SELECT * FROM b WHERE b.num = 3) AS b3 JOIN (SELECT * FROM b WHERE b.num = 4) AS b4 WHERE b3.a_id = b4.a_id AND a.id = b3.a_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 06:51:09 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
Илья В., Несколько подзапросов, вводимых через Exist и объединенных по И. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 08:11:43 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
Илья В.Подсказали решение, но имхо очень тяжелое для железа (30 свойств = 30 JOIN): MasterZivИлья В., Несколько подзапросов, вводимых через Exist и объединенных по И. тогда будет 30 Exist , вместо 30 JOIN, что тоже, наверняка, "не фонтан" ... ТС, в общем случае, для 2-х таблиц (твой в.2) так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. или так Код: sql 1. 2. 3. 4. 5. 6. 7. (имхо, 1-ый способ - лучше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 12:41:23 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
qwerty112, огда будет 30 Exist , вместо 30 JOIN, что тоже, наверняка, "не фонтан" плевать, хоть 200 join. Все равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 17:03:20 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
MasterZivплевать, хоть 200 join. Все равно.200 нельзя, в лимит упретесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 17:37:19 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
qwerty112 Код: sql 1. 2. 3. 4. 5. 6. 7. (имхо, 1-ый способ - лучше) Если правила все одинаковые по форме, то можно еще добавить таблицу (таблицы) типа b_conditions Код: plsql 1. 2. 3. 4. 5. 6. 7. и потом так Код: plsql 1. 2. 3. 4. 5. 6. 7. то-же самое и для других таблиц, c,d,e etc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2013, 19:05:59 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
transposeqwerty112 Код: sql 1. 2. 3. 4. 5. 6. 7. (имхо, 1-ый способ - лучше) Если правила все одинаковые по форме, то можно еще добавить таблицу (таблицы) типа b_conditions Код: plsql 1. 2. 3. 4. 5. 6. 7. и потом так Код: plsql 1. 2. 3. 4. 5. 6. 7. то-же самое и для других таблиц, c,d,e etc. Т.е. ты реально считаешь, что эти запросы проще ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2013, 15:29:39 |
|
||
|
Сложный sql запрос
|
|||
|---|---|---|---|
|
#18+
MasterZiv, На мой взгляд так проще поддерживать, отлаживать и развивать. 1) логика отделена от данных. Не придется править код, если поменяются данные. 2) если нужно автоматизировать - может быть проще тиражировать на новые таблицы, так как идея остается, созаются только новые таблицы. 3) возможно будет легче оптимизировать запрос, так как данные и условия уже лежат в базе а не в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2013, 17:11:12 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38458231&tid=1835764]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
24ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 271ms |

| 0 / 0 |
