|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
Все нормально выводит, но записи по customerID повторяются А хотелось бы иметь одну строку по customerID с условием из второй таблички ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 18:44 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Двух одинаковых записей при DISTINCT в результате быть не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 18:52 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Код: sql 1.
делает LEFT JOIN Orders бессмысленным (равным JOINу) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 18:54 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
iap Код: sql 1.
делает LEFT JOIN Orders бессмысленным (равным JOINу)Если не обращать внимания на нестандартный строковый формат даты. P.S. DISTINCT оставляет по одной записи из совпадающих по ВСЕМ полям записей результата запроса, а не только по customerID ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 18:57 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Владислав КолосовДвух одинаковых записей при DISTINCT в результате быть не может. Так и я так думал, но что-то не доганяю ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 19:01 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
iapiap Код: sql 1.
делает LEFT JOIN Orders бессмысленным (равным JOINу)Если не обращать внимания на нестандартный строковый формат даты. P.S. DISTINCT оставляет по одной записи из совпадающих по ВСЕМ полям записей результата запроса, а не только по customerID Вот... Теперь и я понял А мне нужно отобрать из первой таблички только те записи, которые есть во второй табличке, но ограниченные по дате В терминах задачи - отобрать всех клиентов, которые обслуживались за текущий год ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 19:05 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Вроде как так получилось то что надо Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 19:19 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Уберите записи из таблицы ORDERS... Даты окончания разные, они мешают. Или агрегируйте эти даты в min() или max(). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2014, 19:23 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Domiurg, Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 09:24 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
логичнее не соединять, а использовать exists . т.е. выборка from customer c Код: sql 1. 2.
и не надо будет никакой distinct лепить ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 11:54 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
o-oлогичнее не соединять, а использовать exists . т.е. выборка from customer c Код: sql 1. 2.
и не надо будет никакой distinct лепить 1. Так тоже можно, но в исходном запросе автора выводилась дата заказа, возможно она ему нужна. 2. "select *" - это Вас кто так научил писать? Бросьте немедленно. 3. Подзапросы тоже надо использовать с осторожностью - могут сильно замедлить выполнение (не конкретно про этот случай). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:05 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
mrGuest2. "select *" - это Вас кто так научил писать? Бросьте немедленно.SELECT * в EXISTS() - это нормально. Общепринятая практика. Хотя там можно писать почти всё, что угодно. Это неважно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:11 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
mrGuest2. "select *" - это Вас кто так научил писать? Бросьте немедленно. ну уж точно не mrGuest учил :) приведу цитату уважаемого мной автора по этому поводу а соглашаться ли с Ициком Бен-Ганом или с mrGuest-ом -- личное дело каждого Unlike most other cases, in this case it’s logically not a bad practice to use an asterisk (*) in the SELECT list of the subquery in the context of the EXISTS predicate . The EXISTS predicate only cares about the existence of matching rows regardless of the attributes specified in the SELECT list, as if the whole SELECT clause were superfluous. The SQL Server database engine knows this, and in terms of optimization, ignores the subquery’s SELECT list. So in terms of optimization, specifying the column wildcard * in this case has no negative impact when compared to alternatives such as specifying a constant. However, some minor extra cost might be involved in the resolution process of expanding the wildcard against metadata info. But this extra resolution cost is so minor that you will probably barely notice it. My opinion on this matter is that queries should be natural and intuitive, unless there’s a very compelling reason to sacrifice this aspect of the code. I find the form EXISTS(SELECT * FROM . . .) much more intuitive than EXISTS(SELECT 1 FROM . . .). Saving the minor extra cost associated with the resolution of * is something that is not worth the cost of sacrificing the readability of the code . ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:23 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Для exists я согласен :) Но думаю, что лучше придти к такому написанию осознанно (при желании), когда не имеешь привычки писать везде и всюду "select *", и знаешь почему это плохо. А покажи новичку в SQL, что так можно писать и он ведь так и будет писать, потому что лень, а не по религиозным соображениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:51 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
mrGuestНо думаю, что лучше придти к такому написанию осознанно (при желании), К этому надо "придти" через чтение хелпа. В котором производителм ясно написал Notice that subqueries that are introduced with EXISTS are a bit different from other subqueries in the following ways: - The keyword EXISTS is not preceded by a column name, constant, or other expression. - The select list of a subquery introduced by EXISTS almost always consists of an asterisk (*). There is no reason to list column names because you are just testing whether rows that meet the conditions specified in the subquery exist. ЗЫ "Городская легенда" 1 лучше, чем * была правдой для теперь уже древних версий MSSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 13:57 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Эта легенда бьёт все рекорды по-моему :) Ни у одного фаната этой идеи не хватило, не знаю чего, просто проверить план запроса. select * в общем случае имело и имеет смысл, необходимо лишь понимать последствия. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:09 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
в одном случае звезду просто не получится написать физически и всё-таки придется использовать SELECT 1 Код: sql 1. 2. 3. 4. 5.
Msg 1054, Level 15, State 6, Procedure Test, Line 5 Syntax '*' is not allowed in schema-bound objects. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:21 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
Shakillв одном случае звезду просто не получится написать физически Как будто в таком представлении только в части exists нельзя написать * ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:26 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
GloryShakillв одном случае звезду просто не получится написать физически Как будто в таком представлении только в части exists нельзя написать *но для exists() могли бы это ограничение не учитывать. видимо, выбор был сделан в пользу простоты парсера ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:44 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
ShakillGloryпропущено... Как будто в таком представлении только в части exists нельзя написать *но для exists() могли бы это ограничение не учитывать. видимо, выбор был сделан в пользу простоты парсера А в команде CREATE TABLE вообще select нельзя написать, хоть со звездой, хоть без. И что ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:47 |
|
Помогите с запросом новичку...
|
|||
---|---|---|---|
#18+
по поводу всевозможных домыслов есть отличная сказочка вроде дело было куда проще, чем create view with schemabinding да, я тоже думаю, лень им было выцеплять основной селект, поэтому и подзапрос тоже на предмет звезды шерстит. но прикольно: если в основной селект зафигасить '*' (как строку, в кавычках, ну мало-ли, для красоты вывода), то такую закавыченную звезду пропускает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2014, 14:51 |
|
|
start [/forum/topic.php?fid=46&msg=38712191&tid=1701155]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
179ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 300ms |
0 / 0 |