在WHERE LIKE子句中选择SELECT

时间:2016-12-20 08:35:10

标签: mysql sql

所以我有2个表country_codes和数据库。 如果表国家/地区代码中存在国家/地区代码,我需要从数据库中检索所有列。例如,我需要在我的国家代码表上有123 如果Phone_Number列的前3位数是123,则选择所有列。所以我将选择数字1234567。

表名:Country_Codes

+---------------+
|Country_Code   |
+---------------+
|   123         |
|   456         |
|   556         |
|   231         |
+---------------+

表名:数据库

+---------------+--------+
|Phone_Number   | Used   |
+---------------+--------+
|   1234567     |  No    |
|   4568823     |  No    |
|   5562143     |  No    |
|   5582143     |  No    |
|   2319042     |  No    |
+---------------+--------+

我想要的结果是

表名:数据库

+---------------+--------+
|Phone_Number   | Used   |
+---------------+--------+
|   1234567     |  No    |
|   4568823     |  No    |
|   5562143     |  No    |
|   2319042     |  No    |
+---------------+--------+

我尝试过使用

SELECT * FROM database 
WHERE database.phone_number LIKE (SELECT country_code FROM country_codes);

但我一直在犯错。

2 个答案:

答案 0 :(得分:1)

在发布解决方案之前,需要考虑一些事项:

  1. 不要拨打名为DATABASE
  2. 的表格
  3. 您可以更好地规范化您的结构,您可以在DATABASE表中添加一个关于country_code的外键
  4. 试试这个:

    SELECT d.*
    FROM database d
    JOIN Country_Codes cc
        ON cc.Country_Code like concat(d.Phone_Number, '%')
    

答案 1 :(得分:0)

Use exists and left keywords and get the result : 

CREATE TABLE #Country_Codes(Country_Code VARCHAR(100))
INSERT INTO #Country_Codes(Country_Code)
SELECT 123 UNION ALL
SELECT 456 UNION ALL
SELECT 556 UNION ALL
SELECT 231 

CREATE TABLE #Country_Database(Phone_Number VARCHAR(100), Used VARCHAR(100))
INSERT INTO #Country_Database(Phone_Number , Used)
SELECT '1234567','No' UNION ALL
SELECT '4568823','No' UNION ALL
SELECT '5562143','No' UNION ALL
SELECT '5582143','No' UNION ALL
SELECT '2319042','No' 

SELECT Phone_Number,Used
FROM #Country_Database
WHERE EXISTS(SELECT 1 FROM #Country_Codes WHERE Country_Code =     
LEFT(Phone_Number,3))
相关问题