Этот запрос SQL требует вложенного запроса SELECT? Sql запрос вложенный запрос
sql - Как создать вложенный запрос select в sql
То, что я пытаюсь сделать, это создать раздел комментариев для веб-сайта,
Комментарии состоят из имени пользователя, электронной почты и комментариев. Я храню эти данные в таблице комментариев
CREATE TABLE `comments` ( `commentid` int(5) NOT NULL auto_increment, `user` varchar(40) NOT NULL default '', `email` varchar(100) NOT NULL default '', `comment` text NOT NULL, PRIMARY KEY (`commentid`) )То, что я хочу сделать, это выполнить запрос, который захватывает все эти данные, а также проверяет адрес электронной почты в таблице "users" , чтобы узнать, существует ли он. Если это так, возьмите аватар из таблицы "misc". Если письмо не существует в таблице "users" , оно просто осталось пустым.
В настоящий момент с запросом, который я попробовал, он захватывает только данные из трех таблиц, если письмо существует в таблице "users" . У меня есть еще один комментарий, который, как анонимный пользователь, оставил, но не получил захват запроса.
Я уверен, что мне нужно вложенное select в качестве имени столбца, чтобы, если есть электронное сообщение, оно отображается там... если оно не осталось пустым.
EDIT:
Создал структуры таблиц, как это должно быть.
Это запрос, который я только что попробовал, но он отображает только строку с адресом электронной почты. должен быть другой без адреса электронной почты
SELECT c.comment, c.user, av.avatar FROM comments c INNER JOIN users u ON c.email = u.email LEFT OUTER JOIN ( SELECT userid, avatar FROM misc ) AS av ON av.userid = u.useridqaru.site
sql - Этот запрос SQL требует вложенного запроса SELECT?
Вот что я до сих пор, но результаты ошибочны.
Проблема, с которой я столкнулась, - это счет, он выключен двойным или более. Я считаю, что это связано с тем, что OrderID появляется несколько раз в таблице "Сведения о заказе". Я думаю, мне нужен вложенный оператор SELECT, но я не уверен, как это сделать.
Удаляю ли я выражение SUM(), информацию о заказе и предложение AND из первого запроса? Или я в отъезде?
С помощью я получил поле COUNT для работы, но теперь мое поле SUM ошибочно. Это моя самая последняя попытка, и она дает одинаковое значение для каждого клиента.
SELECT c.CompanyName, COUNT(o.OrderID) AS [Total Orders], (SELECT SUM( (odIN.UnitPrice - (odIN.UnitPrice * odIN.Discount)) * odIN.Quantity) AS [OrderTotal] FROM [Order Details] AS odIN, Orders As oIN WHERE odIN.OrderID = oIN.OrderID) AS [Purchase Total] FROM Customers AS c, Orders AS o WHERE c.CustomerID = o.CustomerID GROUP BY c.CompanyName ORDER BY c.CompanyName;Я все равно хотел бы работать по-другому, но я думаю, что для этого потребуется создать временную таблицу или представление, которое можно было бы использовать для выполнения одного из вычислений, а затем вызвать его из запроса. Это то, что мне нужно будет выяснить.
Спасибо за ваши попытки помочь.
qaru.site
Разделить запрос SQL во вложенный запрос (подзапрос) MS SQL Server
Изменить: добавьте все столбцы из
Возможно, я больше не могу редактировать свой комментарий, но это должно сделать трюк для второго запроса:
SELECT a.* , "AM-Martin_bin".dbo.CpCore_Image.Bytes FROM ( SELECT DISTINCT "AM-Martin".dbo.CpCore_Site.Number , "AM-Martin".dbo.CpCore_Site.Latitude , "AM-Martin".dbo.CpCore_Site.Longitude , "AM-Martin".dbo.CpSm_Face.RetiredOn , "AM-Martin".dbo.CpCore_Site.Name , "AM-Martin".dbo.CpCore_Site.Zipcode , "AM-Martin".dbo.CpSm_Face.Oid FROM "AM-Martin".dbo.CpCore_Site INNER JOIN "AM-Martin".dbo.CpSm_Face on "AM-Martin".dbo.CpSm_Face.SiteId = "AM-Martin".dbo.CpCore_Site.Oid WHERE "AM-Martin".dbo.CpSm_Face.RetiredOn LIKE '%9999%' AND "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LA%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%LC%' OR "AM-Martin".dbo.CpCore_Site.Number LIKE N'%BH%' AND "AM-Martin".dbo.CpCore_Site.Latitude > 0.0 ) AS a INNER JOIN "AM-Martin_bin".dbo.CpCore_Image on a.Oid = "AM-Martin_bin".dbo.CpCore_Image.OwnerId;Для удобства чтения я бы рекомендовал вам использовать псевдонимы ваших таблиц, а не повторять всю часть "AM-MARTIN".dbo.<tablename> (что первоначально меня отбросило с точки зрения поиска правильных столбцов и т. Д.).
Пример:
SELECT a.* , b.Bytes FROM ( SELECT DISTINCT a_inner.Number , a_inner.Latitude , a_inner.Longitude , b_inner.RetiredOn , "a_inner.Name , a_inner.Zipcode , b_inner.Oid FROM "AM-Martin".dbo.CpCore_Site a_inner INNER JOIN "AM-Martin".dbo.CpSm_Face b_inner on b_inner.SiteId = a_inner.Oid WHERE b_inner.RetiredOn LIKE '%9999%' AND b_inner.Number LIKE N'%LA%' OR b_inner.Number LIKE N'%LC%' OR b_inner.Number LIKE N'%BH%' AND b_inner.Latitude > 0.0 ) AS a INNER JOIN "AM-Martin_bin".dbo.CpCore_Image b on a.Oid = b.OwnerId;sqlserver.bilee.com
Вложенные запросы в SQL Безопасный SQL
Цель моего запроса состоит в том, чтобы вернуть название страны и ее главы государства, если у главы headststate есть имя, начинающееся с A, а в столице страны более 100 000 человек, использующих вложенный запрос.
Вот мой запрос:
SELECT country.name as country, (SELECT country.headofstate from country where country.headofstate like 'A%') from country, city where city.population > 100000;Solutions Collecting From Web of "Вложенные запросы в SQL"
Если он должен быть «вложенным», это будет одним из способов, чтобы выполнить вашу работу:
SELECT o.name AS country, o.headofstate FROM country o WHERE o.headofstate like 'A%' AND ( SELECT i.population FROM city i WHERE i.id = o.capital ) > 100000Однако JOIN будет более эффективным, чем коррелированный подзапрос. Неужели тот, кто когда-либо давал вам эту задачу, не в состоянии ускорить себя?
Вам нужно join к двум таблицам, а затем отфильтровать результат в where :
SELECT country.name as country, country.headofstate from country inner join city on city.id = country.capital where city.population > 100000 and country.headofstate like 'A%'Запрос ниже должен помочь вам достичь того, чего вы хотите.
select scountry, headofstate from data where data.scountry like 'a%'and ttlppl>=100000Кроме того, я должен согласиться с Адрианом: почему, черт возьми, вы должны использовать вложенные запросы?
sql.fliplinux.com
php - SQL Вложенный запрос вставки
Сегодня у меня есть база данных с 3 запросами для статистики в тестовых окнах. Я использую php для создания веб-сайта, но запросы выполняются слишком долго, поэтому я не могу показать полную статистику сайта, как я этого не сделал. Так как сейчас база данных обновляется редко в пакетах, поэтому я могу создавать события, которые ежедневно обновляют базы данных ежедневно/еженедельно.
У меня есть следующие 3 запроса сегодня, чтобы отобразить информацию, которую я хочу:
SELECT key FROM testcase GROUP BY key;Это дает мне список с int из 4-10 групп тестов. скажем, 1,2,3,4 для аргумента. Затем я повторяю это в подзапросах как ключ, чтобы получить количество пройденных тестов, а количество тестов не прошло со следующими двумя запросами:
а также
SELECT COUNT(*) AS failed FROM testcase INNER JOIN testcases ON testcase.ID = testcases.testcaseid WHERE pass = 0 AND key = %value%;вот как это работает сегодня. Запросы занимают около 25-30 секунд для каждого ключа и это делает тайм-аут сайта. (% value% - псевдокод для текущего значения из цикла for)
Вместо этого я думал о sql-запросе, который добавил это в таблицу базы данных, которая состоит из таблиц "ключ", "проход", "сбой", которые я заполняю ежедневно/еженедельно, чтобы показывать на сайте статистику. Я видел некоторые случаи, когда вы можете выполнять итерацию с помощью подзапроса, но поскольку 2 выполненных запроса являются противоположностями, я не вижу никакого решения для этого.
Я попытался индексировать значения, которые я использую в запросах, без успеха (что также может быть ошибочным).
//Андреас (начинающий SQL)
Редактировать:
О, дилемма, где, чтобы установить решение, я сделал комбинат от Гордона и Джо, чтобы сделать быстрый запрос, который работал как шарм:
INSERT INTO statistics (key,passed,failed) SELECT key, SUM(case when T.pass = 1 then T.matches else 0 end) as passed, SUM(case when T.pass = 0 then T.matches else 0 end) as failed FROM (SELECT key,pass,COUNT(*) AS matches FROM testcase INNER JOIN testcases ON testcase.ID = testcases.testcaseid GROUP BY key,pass)T GROUP BY keyqaru.site
sql - SQL Server: вложенный запрос выбора
У меня есть SQL-запрос, возвращающий результаты на основе предложения where.
Я хотел бы добавить еще несколько результатов из той же таблицы в зависимости от того, что найдено в первом выборе.
Мой выбор возвращает строки с идентификатором, который соответствует критериям. Случается, что в таблице больше строк с этим идентификатором, но это не соответствует исходным критериям. Вместо того, чтобы повторно запрашивать БД отдельным вызовом, я хотел бы использовать один оператор select, чтобы также получить эти дополнительные строки с тем же идентификатором. ID не является индексом/идентификатором. Это соглашение об именах, которое я использую здесь.
Псевдо: (два шага)
1: select * from table where condition=xxx 2: for each row returned, (select * from table where id=row.id)Я хочу делать:
select id as thisID, field1, field2, (select id, field1, field2 from table where id = thisID) from table where condition=xxxУ меня есть несколько объединений в моем реальном запросе, и просто не могу заставить выше работать. К сожалению, я не могу предоставить реальный запрос, но я получаю сообщение об ошибке:
В списке выбора может быть указано только одно выражение, если подзапрос не вводится с EXISTS. Недопустимое имя столбца 'thisID'
Мой запрос отлично работает с несколькими объединениями, без вышеуказанного. Я пытаюсь получить эти дополнительные записи как часть текущего рабочего запроса.
Пример:
ТАБЛИЦА
select * from table where col3 = 'green' id, col1, col2, col3 123 | blue | red | green ------------------------- 567 | blue | red | green ------------------------- 123 | blue | red | blue ------------------------- 890 | blue | red | green -------------------------То, что я делаю вручную сейчас, получает строку 1, а затем запускает другой запрос на основе идентификатора строки 1, чтобы получить строку 3.
qaru.site