2015-03-09 3 views
-1

У меня есть две таблицы, таблица «климат» и таблица «favourablecrops». Я хочу, чтобы выбрать все благоприятные урожаи для конкретного местоположения, используя этот запрос, но он просто выбирает все, независимо от указанного «ид»MySQL не выбирает строку с заданным идентификатором

SELECT tbl_climatic.location, tbl_favourablecrops.favCrop 
FROM tbl_climatic, 
    tbl_favourablecrops 
WHERE tbl_climatic._id=tbl_favourablecrops.location_id=0 

Просьба помочь

+0

Это действительный синтаксис sql. –

+0

Вы не можете делать 'WHERE \' col1 \ '= \' col2 \ '= value'. Используйте 'WHERE tbl_climatic._id = tbl_favourablecrops.location_id И tbl_climatic._id = 0' – Siyual

+1

Просьба включить структуру таблицы и данные образца. Ваш ГДЕ также не имеет смысла, поскольку он говорит, что X = Y = 0 –

ответ

2

Используйте стандартный join с соответствующими where критериями:

SELECT tbl_climatic.location, tbl_favourablecrops.favCrop 
FROM tbl_climatic join 
    tbl_favourablecrops on tbl_climatic._id=tbl_favourablecrops.location_id 
WHERE tbl_favourablecrops.location_id=0 
+0

спасибо большое, что сработало – Kabs

1

Вы пытаетесь комбинировать join состояние и filter состояние. Используйте правильную INNER JOIN и сохранить состояние ON положение JOIN и перемещать фильтры where п

Может быть, это то, что вы ищете.

SELECT tbl_climatic.location, 
     tbl_favourablecrops.favCrop 
FROM tbl_climatic 
     INNER JOIN tbl_favourablecrops 
       ON tbl_climatic._id = tbl_favourablecrops._id 
WHERE tbl_favourablecrops.location_id = 0 
+0

Приятное время ... Чувствует себя знакомым в предыдущем посте - это подтверждает консенсус немного лучше, чем другой;) – user2480596

1

MySQL не имеет реальные логические типов, вместо этого он использует 0 для лжи и 1 за истину. (Даже если он сделал, есть реальные булевы, это automatically casts values на основе выражения, в котором они используются в любом случае, поэтому это не имеет никакого значения).

A=B=0 разобран как (A=B)=0. Таким образом, выражение сводится к A<>B.

Поэтому вы не фильтрации, как вы вообразили, только для тех записей, где оба tbl_climatic._id и tbl_favourablecrops.location_id равны нулю.

Вы должны выполнить отдельные сравнения:

WHERE tbl_climatic._id = 0 
    AND tbl_favourablecrops.location_id = 0 

Однако, как уже отмечалось, это хорошая практика, чтобы получить в привычку использовать явное объединений, они могут помочь избежать очень много подводных камней.

Смежные вопросы