mysql - 在 mysql 的 where 子句中使用 substring_index

标签 mysql

我有两个表:

mysql> explain Customers
-> ;
+------------------------+-------------+------+-----+---------+-------+
| Field                  | Type        | Null | Key | Default | Extra |
+------------------------+-------------+------+-----+---------+-------+
| customerNumber         | int(11)     | NO   | PRI | NULL    |       |
| customerName           | varchar(50) | NO   |     | NULL    |       |
| contactLastName        | varchar(50) | NO   |     | NULL    |       |
| contactFirstName       | varchar(50) | NO   |     | NULL    |       |
| phone                  | varchar(50) | NO   |     | NULL    |       |
| addressLine1           | varchar(50) | NO   |     | NULL    |       |
| addressLine2           | varchar(50) | YES  |     | NULL    |       |
| city                   | varchar(50) | NO   |     | NULL    |       |
| state                  | varchar(50) | YES  |     | NULL    |       |
| postalCode             | varchar(15) | YES  |     | NULL    |       |
| country                | varchar(50) | NO   |     | NULL    |       |
| salesRepEmployeeNumber | int(11)     | YES  |     | NULL    |       |
| creditLimit            | double      | YES  |     | NULL    |       |
+------------------------+-------------+------+-----+---------+-------+
13 rows in set (0.00 sec)

我的另一张 table 是:

mysql> explain Employees;
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| employeeNumber | int(11)       | NO   | PRI | NULL    |       |
| lastName       | varchar(50)   | NO   |     | NULL    |       |
| firstName      | varchar(50)   | NO   |     | NULL    |       |
| extension      | varchar(10)   | NO   |     | NULL    |       |
| email          | varchar(100)  | NO   |     | NULL    |       |
| officeCode     | varchar(10)   | NO   |     | NULL    |       |
| reportsTo      | int(11)       | YES  |     | NULL    |       |
| jobTitle       | varchar(50)   | NO   |     | NULL    |       |
| salesGoal      | decimal(10,0) | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

我正在尝试编写一个 View 来限制销售代表只能看到他们在系统中输入的客户。我遇到的问题是销售代表的用户名与其电子邮件地址相同。我的 where 子句在允许他们在登录时查看其客户时遇到问题。

到目前为止,我的观点适用于:

SELECT
cu.customerNumber AS ID,
concat(cu.contactFirstName,_utf8' ',cu.contactLastName) AS Name,
concat(cu.addressLine1,_utf8' ',cu.addressLine2) AS Address,
cu.postalCode AS 'Zip Code',
cu.phone AS Phone,
cu.city AS City,
cu.country AS Country
FROM
Customers cu
JOIN Employees s on (cu.salesRepEmployeeNumber = s.employeeNumber)
WHERE employeeNumber = 123456;

我一直在尝试使用类似的东西

SUBSTRING_INDEX(user(), '@', 1)

获取用户名,但我不确定如何将其与“员工”表中的电子邮件列相匹配。我尝试将其与另一个子字符串匹配是否正确?像这样的东西:

SELECT
cu.customerNumber AS ID,
concat(cu.contactFirstName,_utf8' ',cu.contactLastName) AS Name,
concat(cu.addressLine1,_utf8' ',cu.addressLine2) AS Address,
cu.postalCode AS 'Zip Code',
cu.phone AS Phone,
cu.city AS City,
cu.country AS Country
FROM
Customers cu
JOIN Employees s on (cu.salesRepEmployeeNumber = s.employeeNumber)
WHERE SUBSTRING_INDEX(user(), '@', 1) =
(SELECT SUBSTRING_INDEX(email, '@', 1) FROM Employees);

我可能会让这种方式变得比实际需要的更加困难,而且我确信我错过了一些简单的东西!

提前致谢!

最佳答案

我认为这会做你想要的:

WHERE SUBSTRING_INDEX(user(), '@', 1) = SUBSTRING_INDEX(s.email, '@', 1)

不需要子查询。

关于mysql - 在 mysql 的 where 子句中使用 substring_index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037147/

相关文章:

MySQL语法错误异常 : Table XYZ doesn't exist

mysql - 选择具有单个别名的多个列

php - 这怎么能在mysql中完成?

java - Hibernate注释一对多

mysql - 表别名在 mysql 中不起作用

php - 如何修复这个 SQL 语法错误?

php - 连接表时得到重复的结果

PHP 日期时间字段选择今天?

php - 更新重复键时出错

PHP Prepared MySQL 语句开始加引号