Jquery 从一个表使用EAV并连接到另一个表

Jquery 从一个表使用EAV并连接到另一个表,jquery,db2,Jquery,Db2,我有一个名为search的表,其中包含以下记录: 搜寻 SID Parameter Value 100 firstname John 100 middle 100 lastname Doe 100 dateOfBirth 100 firstname Jon 100 middle 100 lastname Doe 100

我有一个名为search的表,其中包含以下记录:

搜寻

SID     Parameter       Value
100     firstname       John
100     middle          
100     lastname        Doe
100     dateOfBirth     
100     firstname       Jon
100     middle          
100     lastname        Doe
100     dateOfBirth     
100     firstname       Homer
100     middle          
100     lastname        Doe
100     dateOfBirth     
这基本上是对John%Doe、Jon%Doe或Homer%Doe的一次搜索

我的客户表是:

CustomerID   FirstName   LastName   dateOfBirth
1            Jonathan    Doe
2            Johny       Doe
3            Jonnie      Doe
4            Homer       Doe
5            Marge       S
然后,我需要加入搜索表,以获得满足这些条件的所有客户

(
AND UPPER( sometable.lastname ) = 'DOE'
AND UPPER( sometable.firstname ) like 'JOHN%'  
)
OR
(
AND UPPER( sometable.lastname ) = 'DOE'
AND UPPER( sometable.firstname ) like 'Jon%'  
)
OR
(
AND UPPER( sometable.lastname ) = 'DOE'
AND UPPER( sometable.firstname ) like 'Homer%'  
)  
我不确定pivot功能在db2中是如何工作的。我必须补充一点,我事先知道SID=100。所以,我只需要100的值

有什么想法吗

试试这个:

/*
WITH 
  SEARCH (SID, Parameter, Value) AS 
(
VALUES
  (100, 'firstname', 'John')
, (100, 'middle', '')    
, (100, 'lastname', 'Doe')
, (100, 'dateOfBirth', '')   
, (100, 'firstname', 'Jon')
, (100, 'middle', '')
, (100, 'lastname', 'Doe')
, (100, 'dateOfBirth', '')
, (100, 'firstname', 'Homer')
, (100, 'middle', '')
, (100, 'lastname', 'Doe')
, (100, 'dateOfBirth', '')
)
, CUSTOMER (CustomerID, FirstName, LastName, dateOfBirth) AS
(
VALUES
  (1, 'Jonathan', 'Doe', '')
, (2, 'Johny', 'Doe', '')
, (3, 'Jonnie', 'Doe', '')
, (4, 'Homer', 'Doe', '')
, (5, 'Marge', 'S', '')
)
*/
SELECT * 
FROM CUSTOMER C
WHERE 
    EXISTS 
(
SELECT 1
FROM SEARCH S
WHERE S.SID=100 AND S.PARAMETER='firstname' AND C.FIRSTNAME LIKE S.VALUE||'%'
)
AND EXISTS 
(
SELECT 1
FROM SEARCH S
WHERE S.SID=100 AND S.PARAMETER='lastname' AND C.LASTNAME=S.VALUE
);
您可以用注释掉的测试数据取消对块的注释,并按原样运行语句。您也可以更改测试数据以进行检查