我正在尝试在 cpanel 共享服务器上的 phpmyadmin SQL 查询框中执行此操作。 这可行,但是 Phone1 和 Phone2 表中的 Local_Formatted 格式并不总是正确。
SELECT `Local_Formatted`,`Line_Type`
FROM `Phone1`
WHERE `Active_Status` NOT LIKE '%Disconnected%'
AND `Region` = 'CA'
AND `Local_Formatted` NOT IN (SELECT `Local_Formatted` FROM `Phone2`);
那就太好了,但是数据库显然填充得不是很好。我们帕金森氏症慈善机构捐献时间的那个人已经去世了。现在我正在尽力提供帮助。
一个大问题是,
Local_Formatted
列中的数字可以是:(在两个表中)
1 123 456 7890
1(123)-456-7890
1234567890
123-456-7890
(123) - 456 7890
and so on.
我还有另一列“Formatted_Phone”,其中的数字如下:
+11234567890
11234567890
1234567890
所以,我认为比较“Formatted_Phone”列是最容易弄清楚的。 我什至试图找到一种方法来获取最后 10 位数字 \D (left,10) 或查询中的任何内容并以这种方式进行比较,但是,这超出了我的能力范围。
SELECT `Local_Formatted`,`Line_Type`
FROM `Phone1`
WHERE `Active_Status` NOT LIKE '%Disconnected%'
AND `Region` = 'CA'
AND `Formatted_Phone` NOT LIKE (SELECT CONCAT('%', `Formatted_Phone`, '%') FROM `Phone2`);
但这行不通。
#1242 - Subquery returns more than 1 row
我尝试了在这里找到的 IN 和 MAX 以及 JOIN 解决方案并研究了几天。我感觉很糟糕,而且很愚蠢,我无法弄清楚这一点。 我想学习如何解决这两个问题,只是出于好奇和我的失败。 但是,我相信无论如何我今天都会在这里学到一些新东西。
期望的结果是列出例如 CA 州表 1 中不在表 2 中的电话(以及我要求的任何相邻小区)。数字在那里,但太多其他字符/格式问题导致无法匹配。
感谢您的帮助。
LIKE
和NOT LIKE
的参数只能是单个字符串,不能是子查询返回的列表。您可以使用 NOT EXISTS
子查询。
AND NOT EXISTS (
SELECT *
FROM Phone2
WHERE Phone1.Formatted_Phone LIKE CONCAT('%', Phone2.Formatted_Phone, '%')
)