2017-02-04 109 views
0

MySQL数据库查询:MySQL服务器版本正确的语法近ID使用

SELECT * 
FROM (SELECT * 
     FROM (`static_package_data`) 
      LEFT JOIN package_interest pi ON static_package_data.id=pi.package_details_id 
     WHERE `package_availability_type` = 'all' 
      AND `admin_status` = 'ACTIVE' 
      AND `status` = 'ACTIVE' 
      AND static_package_data.package_price BETWEEN 2000 AND 5000 
      AND WHERE 'static_package_data.session_id'='AE44278818' 
     GROUP BY static_package_data.id 
     UNION ALL 
     SELECT * 
     FROM (`static_package_data`) 
      LEFT JOIN package_interest pi ON static_package_data.id=pi.package_details_id 
     WHERE `package_availability_type` ='range' 
      AND `admin_status` = 'ACTIVE' 
      AND `status` = 'ACTIVE' 
      AND `to_date` >= '2017-02-04'AND static_package_data.package_price BETWEEN 2000 AND 5000 
      AND WHERE 'static_package_data.session_id'='AE44278818' 
     GROUP BY static_package_data.id 
    ) as dt LIMIT 0 , 10 

下面的查询抛出了一个错误:

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 WHERE 'static_package_data.session_id'='AE44278818' GROUP BY static_package_data.' at line 1

我说会话ID从我现有的查询

+0

你尝试加入'GROUP BY'前的空间? – karthikr

+0

您在AND之前缺少一个空格 – Mikkel

回答

0

简单,

SELECT * 
FROM ( 
       SELECT * 
       FROM  (`static_package_data`) 
       LEFT JOIN package_interest pi 
       ON  static_package_data.id=pi.package_details_id 
       WHERE  `package_availability_type` = 'all' 
       AND  `admin_status` = 'ACTIVE' 
       AND  `status` = 'ACTIVE' 
       AND  static_package_data.package_price BETWEEN 2000 AND  5000 
       AND 
       WHERE  'static_package_data.session_id'='AE44278818' 
       GROUP BY static_package_data.id 
       UNION ALL 
       SELECT * 
       FROM  (`static_package_data`) 
       LEFT JOIN package_interest pi 
       ON  static_package_data.id=pi.package_details_id 
       WHERE  `package_availability_type` ='range' 
       AND  `admin_status` = 'ACTIVE' 
       AND  `status` = 'ACTIVE' 
       AND  `to_date` >= '2017-02-04' 
       AND  static_package_data.package_price BETWEEN 2000 AND  5000 
       AND 
       WHERE  'static_package_data.session_id'='AE44278818' 
       GROUP BY static_package_data.id) AS dt limit 0 , 
     10; 
0

你只需要一个“WHERE”之后的任何东西就应该是AND

2000 AND 5000 AND WHERE 'static_package_data.session_id'='AE4 

应该

2000 AND 5000 AND 'static_package_data.session_id'='AE4 
+0

是的,但是现在查询它不返回任何data.and AND'static_package_data.session_id'='AE4在此会话ID中有多个数据'AE4'对于5行是相同的 –

0

有两个额外的WHERE条款在你的代码与其他的语法错误,如各地的列名,而不是反引号单引号一起。

SELECT 
    * 
FROM 
    (SELECT 
     * 
    FROM 
     `static_package_data` 
    LEFT JOIN package_interest pi ON static_package_data.id = pi.package_details_id 
    WHERE 
     `package_availability_type` = 'all' 
      AND `admin_status` = 'ACTIVE' 
      AND `status` = 'ACTIVE' 
      AND `static_package_data`.package_price BETWEEN 2000 AND 5000 
      AND `static_package_data`.`session_id` = 'AE44278818' 
    GROUP BY static_package_data.id UNION ALL SELECT 
     * 
    FROM 
     `static_package_data` 
    LEFT JOIN package_interest pi ON static_package_data.id = pi.package_details_id 
    WHERE 
     `package_availability_type` = 'range' 
      AND `admin_status` = 'ACTIVE' 
      AND `status` = 'ACTIVE' 
      AND `to_date` >= '2017-02-04' 
      AND `static_package_data`.package_price BETWEEN 2000 AND 5000 
      AND `static_package_data`.`session_id` = 'AE44278818' 
    GROUP BY `static_package_data`.id) AS dt 
-- Consider adding an order by clause here -- 
LIMIT 0 , 10 

而且,考虑使用限制或任何其他行10将获取时添加order by子句来查询。

+0

TQ。但现在查询它不返回任何data.and AND'static_package_data.session_id'='AE4在这个会话ID有多个数据'AE4'是相同的5行 –

+0

@Shan我建议你发布一个新的问题添加样本数据和预期输出解释了为什么输出是这样的 – GurV

相关问题