简体   繁体   English

使用内部联接时的SQL设置变量

[英]SQL set variable when using inner join

I have 2 tables: 我有2张桌子:

1. Coupons with columns {id, business_id, name}
2. Businesses with columns {business_id, name, latitude, longitude}

In general, it's a coupons managment site, every business can offer coupons .. 一般来说,这是一个优惠券管理网站,每个企业都可以提供优惠券..

Coupons.business_id is the Business.business_id that the coupons linked to. Coupons.business_id是优惠券链接到的Business.business_id。

I want to get all the coupons that close enough (20KM) to the user location. 我想获取所有距离用户位置足够近(20KM)的优惠券。

I have the following SQL code that give's me the businesses in this range: 我有以下SQL代码为我提供该范围内的业务

NOTE: lat and lng is the user's longitude and latitude. 注意:lat和lng是用户的经度和纬度。

    String query = "SELECT *,(((acos(sin((" + lat + "*pi()/180)) * " 
      +" sin((`Latitude`*pi()/180))+cos((" + lat + "*pi()/180)) * " 
     + " cos((`Latitude`*pi()/180)) * cos(((" + lng + "- `Longitude`)* "
     + "  pi()/180))))*180/pi())*60*1.1515 " +
    ") as distance  " +
    "FROM `Businesses` HAVING distance < 20 ORDER BY distance";

I tried to use this code for getting the close coupons: (call it second query ) 我试图使用此代码来获取接近的优惠券:(称之为second query

    String query = "SELECT * FROM COUPONS inner join Businesses on Coupons.business_id = Businesses.business_id"
            + " (((acos(sin((" + lat + "*pi()/180)) * " 
      +" sin((`Businesses.latitude`*pi()/180))+cos((" + lat + "*pi()/180)) * " 
     + " cos((`Businesses.latitude`*pi()/180)) * cos(((" + lng + "- `Businesses.longitude`)* "
     + "  pi()/180))))*180/pi())*60*1.1515 " +
    ") as distance HAVING distance < 20 ORDER BY distance";

I'm getting the following error: 我收到以下错误:

Hibernate: SELECT * FROM COUPONS inner join Businesses on Coupons.business_id = Businesses.business_id (((acos(sin((33.207933*pi()/180)) *  sin((`Businesses.latitude`*pi()/180))+cos((33.207933*pi()/180)) *  cos((`Businesses.latitude`*pi()/180)) * cos(((35.570246- `Businesses.longitude`)*   pi()/180))))*180/pi())*60*1.1515 ) as distance HAVING distance < 20 ORDER BY distance
Dec 24, 2013 12:36:31 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/InternetProject] threw exception [org.hibernate.exception.SQLGrammarException: could not execute query] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'as distance HAVING distance < 20 ORDER BY distance' at line 1

What is the problem in my second query and how can I fix it? 我的第二个查询有什么问题,我该如何解决? thanks in advance.. Using mySQL. 在此先感谢..使用mySQL。

You mixed up the inner join and select statements. 您混合了内部联接和选择语句。 Try this: 尝试这个:

String query = "SELECT *, (((acos(sin((" + lat + "*pi()/180)) * " 
      +" sin((`Businesses.latitude`*pi()/180))+cos((" + lat + "*pi()/180)) * " 
     + " cos((`Businesses.latitude`*pi()/180)) * cos(((" + lng + "- `Businesses.longitude`)* "
     + "  pi()/180))))*180/pi())*60*1.1515 " +
    ") as distance FROM COUPONS inner join Businesses on Coupons.business_id = Businesses.business_id HAVING distance < 20 ORDER BY distance";

Your SQL Statement is broken 您的SQL语句已损坏

it needs to look like this 它需要看起来像这样

SELECT *, 
       [domaths] AS distance 
FROM   table 
       INNER JOIN other_table 
               ON id = id 

Have you try this , 你尝试过这个吗

SELECT c.business_id, 
       c.agent_name, 
       bus.mybusinessid, 
       bus.latitude, 
       bus.longitude 
FROM   coupons c 
       INNER JOIN (SELECT business_id, 
                          Count(*) AS mybusinessid, 
                   FROM   businesses 
                   GROUP  BY business_id) bus 
               ON bus.business_id = c.business_id; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM