どのように「LIKE」を使用してサブクエリを検索しますか?
例えば。私はこれを試みましたが、うまくいきません:
SELECT *
FROM mytable
WHERE name
LIKE '%
(SELECT name FROM myothertable)
%'
私はこれをこれまでに持っています:
SELECT * FROM t1
WHERE t1.name IN (SELECT t2.name FROM t2)
AND (t1.title IN (SELECT t2.title FROM t2)
OR t1.surname IN (SELECT t2.surname FROM t2))
完全一致を返すので問題なく動作しますが、類似する他のレコードは返されないようです。そのため、次の点も確認したいと思います。
t1.title LIKE '%t2.title%' AND t1.surname LIKE '%t2.surname%'
どうすればよいですか?
JOINの使用:
SELECT a.*
FROM mytable a
JOIN myothertable b ON a.name LIKE CONCAT('%', b.name, '%')
...ただし、特定のmyothertable
レコードのmytable
に複数の一致がある場合、重複する可能性があります。
EXISTSの使用:
SELECT a.*
FROM mytable a
WHERE EXISTS (SELECT NULL
FROM myothertable b
WHERE a.name LIKE CONCAT('%', b.name, '%'))
全文検索MATCH
を使用(myothertable
はMyISAMが必要)
SELECT a.*
FROM mytable a
JOIN myothertable b ON MATCH(a.name) AGAINST (b.name)
例えば:
SELECT a_column
FROM mytable t
WHERE EXISTS (
SELECT 1
FROM myothertable ot
WHERE t.`name` LIKE '%' || ot.`name` || '%');
用語に関する限り、これは相関サブクエリと呼ばれます。
ちょうど別の方法:
select a.field, b.code
from table1 a
inner join (select code from table2 where ....) b on a.field like CONCAT('%', b.code, '%')
この文字列は私には問題ありません。
"SELECT * FROM table1 WHEREフィールドのようなCONCAT( '%'、(SELECT id FROM table2)、 '%')";
SELECT * FROM t1 WHERE t1.name IN(SELECT t2.name FROM t2)AND(t1.title IN(SELECT t2.title FROM t2)OR t1.surname IN(SELECT t2.surnameからt2))
それは私のために働いた
SELECT *
FROM mytable
WHERE name
LIKE CONCAT('%',(SELECT name FROM myothertable),'%')
最良の方法は、NameMatch()という関数を作成することです。
最終クエリ:
SELECT * FROM mytable WHERE dbo.NameMatch(name) = 1
関数は次のようになります。
create function dbo.NameMatch
(@_name varchar(100))
returns bit
as begin
declare @res bit
if exists (select 1 from myothertable where @_name like '%' + name + '%' )
set @res = 1
else set @res = 0
return @res
end