Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / синтаксис подзапрос / 21 сообщений из 21, страница 1 из 1
23.07.2013, 16:33:34
    #38340874
ВячеславЛ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
в общем на php+mysql нужно сделать выборку

так бы я написал на MS SQL

select * from t1 where t1.id_t2_n in (select t2.n where t2.id=1)

думаю разжевывать не надо... )))

как на mysql сварганить такой запрос?

заранее спасибо!
...
Рейтинг: 0 / 0
23.07.2013, 16:59:01
    #38340936
синтаксис подзапрос
Да в точности также.
...
Рейтинг: 0 / 0
23.07.2013, 19:59:09
    #38341244
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
А если будет тупить - переписать на иннерджойн.
...
Рейтинг: 0 / 0
24.07.2013, 16:12:34
    #38342439
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
по-моему и на ms sql можно записать так

select t1.*, t2.n from t1, t2 where t1.id_t2_n = t2.n and t2.id=1;
...
Рейтинг: 0 / 0
25.07.2013, 17:05:00
    #38344025
Megabyte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
debloggerпо-моему и на ms sql можно записать так

select t1.*, t2.n from t1, t2 where t1.id_t2_n = t2.n and t2.id=1;
Написать-то можно, но вообще тем, кто так пишет, в аду приготовлен специальный костер!
Лучше оформлять через INNER JOIN
...
Рейтинг: 0 / 0
25.07.2013, 19:38:55
    #38344273
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
Megabyte,

Не сгущайте краски, на костер это не тянет. Костер там для тех, кто мешает запятые с явными JOIN-ами. :)
...
Рейтинг: 0 / 0
25.07.2013, 23:23:01
    #38344460
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
Megabyte,

inner join это короста которой покрывается мозг тех, кто слушает полугурков.
...
Рейтинг: 0 / 0
25.07.2013, 23:27:53
    #38344464
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
Чтобы жизнь малиной не казалась

FROM a INNER JOIN b INNER JOIN c ON (b.id = c.id) ON (a.id = c.id)

http://stackoverflow.com/questions/10856016/can-you-have-an-inner-join-without-the-on-keyword

http://ru.wikipedia.org/wiki/Реляционная_алгебра

Так в чем разница выяснения отношений в этих двух синтаксисах?
...
Рейтинг: 0 / 0
26.07.2013, 00:21:50
    #38344500
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
deblogger,

Вы даете ссылку про inner join в Оракле.
Однако в MySQL ситуация несколько другая:
http://dev.mysql.com/doc/refman/5.5/en/join.html In MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents (they can replace each other). In standard SQL, they are not equivalent.
...
Рейтинг: 0 / 0
26.07.2013, 04:54:22
    #38344541
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
miksoft,

При чем тут оракле, ну, то ест понятно при чем. Смысл в том что синтаксис INNER JOIN скрывает от пользователя всю правду, потому что неизбежно тянет за собой ON. Вы отрезали логический конец в цитате: "INNER JOIN is used with an ON clause, CROSS JOIN is used otherwise."

Чувак на переполненном стеке и задает вопрос - а что будет без ON? Ну надо полагать то и будет, t1*t2 без ограничений. Тогда зачем платить больше, если можно натурально все описать как ест? select t1, t2; К чему лишние сущности?

Тривиальный пример

В иерархической таблице 253 записи. Поля name, iden, parent. parent показывает на id. Я взял такую таблицу чтобы была одна, а не две штуки.

пишу SELECT t1.*, t2.* FROM product_group t1, product_group t2

То есть умножаю таблицу саму на себя. Showing rows 0 - 29 (64,009 total, Сейчас в таблице тотально все что надо. Остается только отрезать лишнее.

пишу SELECT t1.*, t2.* FROM product_group t1, product_group t2 WHERE t1.id = t2.parent;

Showing rows 0 - 29 (233 total... Это и есть INNER JOIN. Зачем его явно описывать, когда еще более явно оно фигурирует после слова FROM в перечислении таблиц.

Поскольку inner не оставляет нужной информации для дальнейшего разворачивания иерархии, то дальше умножать таким способом смысла нет и вот тогда появляется смысл в LEFT JOIN.

А пока он не появился - зачем усложнять?
...
Рейтинг: 0 / 0
26.07.2013, 05:27:12
    #38344551
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
В большинстве же практических применений, скажем заменить указатели на справочники содержанием поля справочника - требуется INNER JOIN как метод. Нам не нужна лишняя информация, надо Название города вставить ON Код города допустим. Однако синтакис INNER JOIN ON дает тавтологию в контексте. Отношения задаются в явном виде условием Города.Код Города = Продукт.Код Города. Разве не ясно как относится поля из самого условия? Да, в это частном случае удобно юзать USING.
...
Рейтинг: 0 / 0
26.07.2013, 05:30:15
    #38344552
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
И вообще оракля на моей стороне :)

Some join examples:

SELECT * FROM table1, table2;

Конец цитаты. Такой синтаксис идет первым в списке.
...
Рейтинг: 0 / 0
26.07.2013, 12:49:24
    #38345045
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
deblogger,

Я никак не пойму, о чем вы толкуете? INNER JOIN хуже, потому что букв набирать больше?
Еще раз процитирую:
In standard SQL, they are not equivalent.Добавлю - не только в стандарте, но в других СУБД. Поэтому кивки на Оркал непонятны.
...
Рейтинг: 0 / 0
26.07.2013, 14:00:10
    #38345206
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
miksoft,

INNER JOIN хуже потому что человек не понимает что происходит, считает будто бы именно синтаксис INNER JOIN ему все обеспечивает. А вы думаете откуда берутся вложенные силекты для двух таблиц?
...
Рейтинг: 0 / 0
26.07.2013, 14:02:30
    #38345214
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
deblogger,

Про эквивалент они пишут о CROSS'е. Инны насколько я понимаю, везде одинаковые. По крайней мере в МС точно так же.
...
Рейтинг: 0 / 0
26.07.2013, 14:05:26
    #38345223
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
debloggermiksoft,

INNER JOIN хуже потому что человек не понимает что происходит, считает будто бы именно синтаксис INNER JOIN ему все обеспечивает. А вы думаете откуда берутся вложенные силекты для двух таблиц?Все равно не понимаю. Вложенные селекты для двух таблиц вполне имеют право на жизнь, особенно, если к ним нужно применить, например, агрегацию.
...
Рейтинг: 0 / 0
26.07.2013, 14:20:53
    #38345246
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
miksoft,

Не знаю что сказать. Есть такие люди, как их, выживисты короче, забыл как по-английски. Копают бункеры и агрегируют туда консервы. Вспомнил, сюрвиалисты от survive.

Вы, конечно, национально правы - это по-нашему все усложнять на пустом месте чтобы враг не разобрался никогда, а что мы сами не разбираемся в том, что делаем - не беда. Всегда можно стырить годную фишку и приспособить как-нибудь.

Я пытался объяснить что надо понимать что происходит, поскольку иначе все начинает бессмысленно и вредно усложняться как в примере в первом сообщении.

Пришлось агрегироваться - агрегируйтесь. И вообще SQL идет в противоположную от намеченной творцами цели. С чего начинается статья про джойны? С того, что две трети задумок потомки так и не реализовали. Зато вложенные силекты им сделали.
...
Рейтинг: 0 / 0
26.07.2013, 14:26:24
    #38345254
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
debloggerнадо понимать что происходитС этим не могу не согласиться :)
По остальному полемизировать не берусь, сейчас не могу.
...
Рейтинг: 0 / 0
26.07.2013, 14:52:26
    #38345311
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
debloggerнадо понимать что происходитт.е. вам не нравится тот факт, что мускуль позволяет отдельным кодерастам писать запросы, даже не понимая, что они, собственно, пишут (и при этом не ругается на синтаксис и т.д)? ну да, есть такое, яркий пример - отключенный по умолчанию only_full_group_by...
"but that's a fearure!" (c) :)
...
Рейтинг: 0 / 0
26.07.2013, 15:31:04
    #38345405
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
deblogger,

Почему "усложнять"? Для наглядности преобразуйте в общее декартово произведение левый джойн с каким-нибудь отсекающим условием... а я на вас посмотрю. :)

К примеру:

SELECT * FROM table1 LEFT JOIN table2 ON table2.fkey=table1.id AND table2.control IN(1,2,3) ;

только потому, что условие в ON - наглядно, его и использую вместо операции "запятая"... :)
...
Рейтинг: 0 / 0
26.07.2013, 15:57:04
    #38345485
Megabyte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
синтаксис подзапрос
debloggermiksoft,

INNER JOIN хуже потому что человек не понимает что происходит, считает будто бы именно синтаксис INNER JOIN ему все обеспечивает.
0_о
Новое слово в разработке серверного кода!
А стандарт ANSI вообще идиоты писали...

[INNER|LEFT|RIGHT] JOIN явно показывает, что таблицы связаны.
Через запятые сам пишу, когда таблицы никак не связаны, но НД один.
Для меня это просто культура и стандарт. + наглядность.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / синтаксис подзапрос / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]