PHPMYADMIN - 电话与两个表中的其他电话不同 - 从“Phones1”中选择“Phone”,其中“Phone”与“Phones2”中的“Phone”不同

问题描述 投票:0回答:1

我正在尝试在 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 中的电话(以及我要求的任何相邻小区)。数字在那里,但太多其他字符/格式问题导致无法匹配。

感谢您的帮助。

mysql sql-like
1个回答
0
投票

LIKE
NOT LIKE
的参数只能是单个字符串,不能是子查询返回的列表。您可以使用
NOT EXISTS
子查询。

AND NOT EXISTS (
    SELECT *
    FROM Phone2
    WHERE Phone1.Formatted_Phone LIKE CONCAT('%', Phone2.Formatted_Phone, '%')
)
© www.soinside.com 2019 - 2024. All rights reserved.