Ошибка SQL-запроса - нужны свежие глаза - PullRequest
3 голосов
/ 14 января 2011

Хорошо, во-первых, я создаю запрос для поиска данных MLS, который был предоставлен в форме базы данных MySQL, поэтому у меня нет контроля над форматом данных, и поэтому я считаю, что должен сделатьмного кастинга, чтобы получить данные в управляемой форме.Ошибка SQL обрабатывается.

#1064 - 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 ' DECIMAL(2, 1)) / .5, 
CAST(idx1.full_baths, DECIMAL(2, 1))), DECIMAL(2, 1)) AS b' at line 1

Поиск кода ошибки и отправка меня на страницу зарезервированных слов, но я не могу определить какие-либо зарезервированные слова.

и теперьsql

(все поля изначально VARCHAR)

SELECT  idx_common.mls_no AS mls_no, 
        CONCAT_WS(" ", idx_common.street_no, idx_common.street_direction, idx_common.street_name) AS address, 
        idx_common.city AS city, 
        idx_common.state AS state, 
        idx_common.total_sqft AS total_sqft, 
        idx_common.asking_price AS price, 
        idx1.bedrooms AS bedrooms, 
        CAST(
            SUM(
                (CAST(idx1.half_baths, DECIMAL(2, 1)) / .5), 
                CAST(idx1.full_bath, DECIMAL(2, 1))
            ), 
            DECIMAL(2, 1)
        ) AS bathrooms, 
        idx1.residential_prop_type AS type, 
        "Listing Agent" AS agent 

FROM (idx_common) 
JOIN idx1 ON idx_common.mls_no = idx1.mls_no 

WHERE `idx_common`.`mls_no` = 'query' 
OR idx_common.zip LIKE '%query%' 
OR idx_common.city LIKE '%query%'

Ответы [ 4 ]

3 голосов
/ 14 января 2011

SUM () принимает один аргумент. У вас есть SUM (Cast (...), Cast (...))

Я думаю, что ты хотел сделать +, а не СУММУ (CAST (idx1.half_baths, DECIMAL (2, 1)) / .5) + CAST (idx1.full_bath, DECIMAL (2, 1))

СУММА добавляет все значения столбца во всей таблице. Вы можете использовать его только в запросе GROUP BY.

3 голосов
/ 14 января 2011

Я полагаю, вам не нужно SUM здесь вообще:

SELECT  idx_common.mls_no AS mls_no, 
        CONCAT_WS(" ", idx_common.street_no, idx_common.street_direction, idx_common.street_name) AS address, 
        idx_common.city AS city, 
        idx_common.state AS state, 
        idx_common.total_sqft AS total_sqft, 
        idx_common.asking_price AS price, 
        idx1.bedrooms AS bedrooms, 
        CAST(idx1.half_baths AS DECIMAL(2, 1)) * .5 +
        CAST(idx1.full_bath AS DECIMAL(2, 1)) AS bathrooms, 
        idx1.residential_prop_type AS type, 
        "Listing Agent" AS agent 
FROM    idx_common
JOIN    idx1
ON      idx_common.mls_no = idx1.mls_no 
WHERE   `idx_common`.`mls_no` = 'query' 
        OR idx_common.zip LIKE '%query%' 
        OR idx_common.city LIKE '%query%'

Я также изменил / 0.5 на * 0.5, так как он кажется более подходящим для этого запроса.

Если в квартире есть 3 половинных ванных комнат и 2 полных ванных комнат, этот запрос выведет (3 / 2) + 2 = 3.5 ванных комнат.

Это то, что вы хотели?

2 голосов
/ 14 января 2011

Я считаю, что функция CAST работает с AS, а не с ",".Вот так:

CAST(idx1.half_baths AS DECIMAL(2, 1))

Вы должны заменить это на всех своих АКТАХ.

1 голос
/ 14 января 2011

Убедитесь, что ваша версия MYSQL> 5.0.8.Тип DECIMAL не был добавлен в функцию CAST до этой версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...