我正在尝试使用JOIN进行查询,该查询应该如下:
我想JOIN
并从 CUSTOMER表(ID
)和 TASK表({{}返回id
的数据{1}})是一样的。
我的customer_id
下面的查询从 TASK表返回正确的任务数据($sql
),但它始终返回ID 1当 CUSTOMER表从 CUSTOMER表返回ID 5时, CUSTOMER表。
我无法弄清楚我做错了什么?
我的SQL查询例如:
[customer_id] => 5
我的CUSTOMER表信息:
$sql = ("SELECT * FROM customer, task WHERE customer.id = task.customer_id LIKE 5 ");
我的任务表信息:
CREATE TABLE `customer` (
`id` int(40) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL DEFAULT '',
`mobil` varchar(20) NOT NULL,
`email` varchar(50) NOT NULL DEFAULT '',
`Messages` varchar(200) NOT NULL DEFAULT '',
`adr` varchar(50) NOT NULL DEFAULT '',
`zip` int(4) NOT NULL,
`date_created` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
答案 0 :(得分:1)
我对这种情况感到惊讶。让我们来看看这个表达式:
customer.id = task.customer_id LIKE 5
请记住,LIKE
和=
都是二元运算符,这只能是两种方式之一:
5
进行比较。 task.customer_id LIKE 5
的布尔结果与您的customer.id
字段进行比较。 According to the docs,这些运算符具有相同的优先级。但是,根据您的结果(id为1的单个记录),看起来第二个选项实际上正在发生。由于task.customer_id的值为5,因此该条件通过; LIKE表达式的布尔结果为1,因此您获得customer.id为1的记录。
我们可以通过将LIKE
与AND
进行比较来解决此问题。在我们处理它的同时,让我们抛弃过时的A,B
连接语法:
SELECT *
FROM customer
INNER JOIN task ON customer.id = task.customer_id
WHERE customer.id LIKE 5
答案 1 :(得分:0)
尝试:
SELECT * FROM customer join task on customer.id = task.customer_id where customer.id = 5