2016-12-20 33 views
0

私は2つのテーブルcountry_codesとDatabaseを持っています。 テーブルの国別コードに国コードがある場合は、データベースからすべての列を検索する必要があります。 Country_CodesWHERE LIKE句の中のSELECT

+---------------+ 
|Country_Code | 
+---------------+ 
| 123   | 
| 456   | 
| 556   | 
| 231   | 
+---------------+ 
:PHONE_NUMBER列の最初の3桁が123だから私は数1234567

テーブル名を選択しますある場合たとえば、私は私の国別コードテーブルに123を持って、私はすべての列を選択するには が必要

表名:データベース

+---------------+--------+ 
|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); 

を使用して試してみました。しかし、私はエラーを取得し続けます。投稿する前に、

答えて

1

ソリューション、いくつかの注意事項:

  1. はあなたがより良いあなたの構造を正規化することができます名前DATABASE
  2. でテーブルを呼び出さないでください、あなたはCOUNTRY_CODEに関するデータベーステーブルの外部キーを追加することができます

これを試してみてください:

SELECT d.* 
FROM database d 
JOIN Country_Codes cc 
    ON cc.Country_Code like d.Phone_Number + '%' 
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)) 
関連する問題