抱歉,标题令人困惑,我很难描述我的问题。
表A中可以有多个具有相同社会保险号的帐户。
方案::我需要表A中的所有帐号,这些帐号具有基于表B中的帐号的匹配的社会保险号(也在表A中),但是我还需要添加一个是/否标记,如果帐号是表B中的特定帐号。
所以我的思路:我有一个基于特定帐户关闭日期的表B中的帐号列表:
SELECT TableB.acn
FROM TableB
WHERE tableB.CloseDate = '2019-06-30'
使用子查询,我可以从表A中获得所有帐户的列表:
SELECT TableA.Acn, TableA.SSN
FROM Table A
WHERE table A.SSN in (SELECT TableA.SSN
FROM TableA
INNER JOIN TableB ON TableA.ACN = TableB.ACN
WHERE tableB.closeDate = '2019-06-30')
但这就是我的难处,因为我不知道如何
任何帮助都会很棒。接下来的一个小时左右,我将进行大量监视,以防有人有任何后续问题。
非常感谢您的帮助。
答案 0 :(得分:0)
如果您只想标记是否存在匹配项,那么我认为这可以满足您的要求:
public function insertOrder($data){
$errors = $this->validate( $data );
if (empty($errors)) {
$sql = "INSERT INTO `orders` (`amount`) VALUES (:amount)";
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':amount', $data['amount']);
if ($stmt->execute()) {
return $this->selectOrderById($this->pdo->lastInsertId());
}
}
return false;
}
public function insertCartItem($dataB){
$errors = $this->validateB($dataB);
if (empty($errors)) {
$sql = "INSERT INTO `cart_items` (`order_id` `product_id`,`quantity`) VALUES (:order_id, :product_id, :quantity)";
$stmt = $this->pdo->prepare($sql);
$stmt->bindValue(':order_id', $dataB['order_id']);
$stmt->bindValue(':product_id', $dataB['product_id']);
$stmt->bindValue(':quantity', $dataB['quantity']);
if ($stmt->execute()) {
return $this->selectCartItemById($this->pdo->lastInsertId());
}
}
return false;
}
答案 1 :(得分:0)
尝试这个sql fiddle
数据
create table acct_and_ssn (
acct int,
ssn varchar(255)
);
insert into acct_and_ssn (acct, ssn)
values
(1, 123456789),
(2, 123456789),
(3, 123456789),
(4, 223456789),
(5, 223456789),
(6, 333456789),
(7, 333456789),
(8, 333456789),
(9, 444567889),
(10, 444567889)
;
create table acct_and_date (
acct int,
mydate date
);
insert into acct_and_date (acct, mydate)
values
(2, '06/30/2019'),
(6, '06/30/2019'),
(9, '04/12/2019')
;
帐户2和6符合我们的标准。与2和6相关联的SSN也与帐户1、3、7和8相关联。
with flagged_accounts_cte (acct, ssn) as
(
select
a.acct,
a.ssn
from
acct_and_ssn a inner join acct_and_date b
on a.acct = b.acct and b.mydate = '06/30/2019'
)
select
c.acct,
c.ssn,
(case
when c.acct = d.acct then 1 else 0
end) as myflag
from
acct_and_ssn c
inner join flagged_accounts_cte d
on c.ssn = d.ssn
创建一个子查询(此处为CTE),以标识已关闭的帐户,然后将其与SSN备份到表中以查找其他帐户。
给我们
acct ssn myflag
1 123456789 0
2 123456789 1
3 123456789 0
6 333456789 1
7 333456789 0
8 333456789 0