2013-11-22 4 views
0

현재 하나의 행만 표시해야하는 쿼리가 있습니다. 그러나 그것은 어떻게 든 그 결과 세트로 4 행을 표시하고 있는데, 1) 테이블에서 오직 3 개의 행만으로 시작하여 2) 오직 하나의 행만이 쿼리 기준과 일치하더라도.mysql 쿼리가 잘못된 행을 표시합니다.

누군가가 내가이 MySQL의 쿼리

내 데이터베이스 테이블 구조를 잘못하고있는 무슨 알고있을 바라고을 내 테이블 항목은 지금 (테이블의 순서를 따르고 있습니다

 
smsid (int, auto increment), sms_type (text), sms_status (enum 'pending',sent'), 
sms_error (test), sms_message(text), sms_mp3file (varchar 50), 
sms_sendon (datetime), send_sms_toid (int 5) 

다음과 같다 위의 열)

 
31 | mp3 | pending | | | helloworld.mp3 | 2013-11-20 16:16:00 | 7 

30 | text | sent | | hello test | | 2013-11-18 13:12:00 | 8 

29 | voice | sent | | testing 123 | | 2013-11-18 10:05:00 | 18 

내 쿼리는 다음과 같다

SELECT sms_messages.*, sms_recipients.cust_profid, sms_recipients.sms_cellnumber, 
customer_smsnumbers.sms_number, customer_smsnumbers.sms_number 
FROM sms_messages, sms_recipients, customer_smsnumbers 
WHERE sms_messages.sms_type='mp3' AND sms_messages.sms_sendon <= '2013-11-21' 
AND sms_messages.sms_status='pending' AND 
sms_messages.send_sms_toid = sms_recipients.smsuser_id 

답변

2

검색어에 customer_smsnumbers 표에 JOINING 절이 누락되었습니다. sms_messages.send_sms_toid = sms_recipients.smsuser_id과 마찬가지로 connects sms_messagescustomer_smsnumbers 테이블을 결합하거나 sms_recipientscustomer_smsnumbers 테이블로 연결하는 조인 절이 있어야합니다.

조인 절이 없으면 다른 (의도하지 않은) 레코드가 결과에 포함됩니다.

+0

+1하지만 행을 표시하지 않기 위해 MySQL을 비난하면 정말 좋아합니다. –

관련 문제