Проблемы при написании запроса для базы данных MySQL - PullRequest
0 голосов
/ 17 апреля 2011

В моей базе данных SQL есть две таблицы:

mysql> select *from crop;
+------+-----------+----------+
| no   | name      | type     |
+------+-----------+----------+
| 1    | pineapple | fruits   |
| 2    | wheat     | mainFood |
| 1    | apple     | fruits   |
| 2    | corn      | main     |
| 3    | rose      | flower   |
| 2    | wheat     | main     |
| 2    | maize     | main     |
| 1    | drydates  | fruits   |
+------+-----------+----------+

mysql> select *from enviornment;
+---------+------------+----------+------+
| climate | irrigation | soil     | no   |
+---------+------------+----------+------+
| humid   | medium     | alluvial | 2    |
| humid   | medium     | black    | 1    |
| humid   | medium     | red      | 1    |
| sunny   | low        | black    | 1    |
| sunny   | medium     | alluvial | 1    |
| wet     | high       | red      | 2    |
| humid   | low        | red      | 3    |
+---------+------------+----------+------+

Я хочу получить поля name и type от crop table, основываясь на климате, почве и ирригации.

Я написал свой запрос следующим образом:

mysql> select T.name from((select name from crop)as T and (select no from envior
nment where climate like wet)as U)where T.no=U.no;

Но когда я пытаюсь выполнить его, я получаю следующую ошибку:

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'и (выберите no из среды, где климат влажный) как U) где T.no = U.no' в строке 1

Может кто-нибудь сказать мне, как переписать мой запрос, чтобы избежать этой ошибки?

Ответы [ 5 ]

1 голос
/ 17 апреля 2011

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

select c.name, c.type, e.climate, e.soil, e.irrigation
from crop c, environment e
where c.no = e.no; 
1 голос
/ 17 апреля 2011
select T.name 
from (select name from crop) as T 
inner join (select no from enviornment where climate like wet) as U
on T.no = U.no
0 голосов
/ 17 апреля 2011

user711934, хотя приятно, когда люди показывают, как переписывать запросы, я предлагаю вам еще несколько учебных пособий или купить книгу и т. Д. По SQL-запросам, конкретно относящимся к объединениям, чтобы изучить основы. Вы не должны полагаться на подзапросы, они менее эффективны.

я предлагаю сделать эти уроки http://www.sql -tutorial.net /

специально просмотрите эти примеры соединения http://www.sql -tutorial.net / SQL-JOIN.asp

http://beginner -sql-tutorial.com / SQL-запрос-tuning.htm

Надеюсь, это поможет

0 голосов
/ 17 апреля 2011

Вы должны использовать запятую между таблицами в предложении from, а не and. Вы забыли апострофы вокруг строки 'wet'.

Нет смысла выбирать из подвыборов, вам просто нужно выбрать из таблиц напрямую:

select
  T.name, T.type
from
  crop as T,
  enviornment as U
where
  T.no = U.no and U.climate = 'wet'

В настоящее время объединение обычно выполняется с помощью команды join:

select
  T.name, T.type
from
  crop as T,
  inner join enviornment as U on T.no = U.no
where
  U.climate = 'wet'

Примечание: имя вашей таблицы enviornment написано неправильно, оно должно быть environment.

0 голосов
/ 17 апреля 2011

Вы можете сделать то же самое без использования подвыборов, что будет быстрее:

SELECT `T`.`name` 
FROM `enviornment` AS `U` 
    , `crop` AS `T`
WHERE `U`.`climate` LIKE 'wet'
    AND `U`.`no` = `T`.`no`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...