Problems writing a query for MySQL database
Problems writing a query for MySQL database
I have two tables in my SQL database:
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 | +---------+------------+----------+------+ I want to get the name and type fields from the crop table, based on climate, soil, and irrigation.
I have written my query in the following way:
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; But when I try to execute it, I get the following error:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and (select no from enviornment where climate like wet)as U)where T.no=U.no' at line 1
Can anyone tell me how to re-write my query to avoid this error?
Answer by Sean Adkinson for Problems writing a query for MySQL database
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 Answer by Laimoncijus for Problems writing a query for MySQL database
You could do the same without using subselects, which would be faster:
SELECT `T`.`name` FROM `enviornment` AS `U` , `crop` AS `T` WHERE `U`.`climate` LIKE 'wet' AND `U`.`no` = `T`.`no` Answer by crunchdog for Problems writing a query for MySQL database
You cannot use AND to construct query-results, it's a logical operator. You can get all name, type, climate, soil and irrigation combinations with:
select c.name, c.type, e.climate, e.soil, e.irrigation from crop c, environment e where c.no = e.no; Answer by Guffa for Problems writing a query for MySQL database
You should use comma between tables in the from clause, not and. You have forgotten the apostrophes around the string 'wet'.
There is no point in selecting from subselects, you should just select from the tables directly:
select T.name, T.type from crop as T, enviornment as U where T.no = U.no and U.climate = 'wet' Nowadays a join is commonly done using the join command:
select T.name, T.type from crop as T, inner join enviornment as U on T.no = U.no where U.climate = 'wet' Note: Your table name enviornment is spelled wrong, it should be environment.
Answer by wired00 for Problems writing a query for MySQL database
user711934, although its nice having people show how to rewrite queries i suggest you do some more tutorials or buy a book etc on SQL queries specifically relating to joins to learn the fundamentals. You shouldn't rely on sub queries they are less efficient.
i suggest doing these tutorials http://www.sql-tutorial.net/
specifically go through these join examples http://www.sql-tutorial.net/SQL-JOIN.asp
http://beginner-sql-tutorial.com/sql-query-tuning.htm
I hope that helps
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72

0 comments:
Post a Comment