INSERT INTO filerecord (fname,
lname,
transdate,
memberid)
VALUES ('tyler',
'smith',
TO_DATE ('07/01/2016', 'mm/dd/yyyy'),
'111');
我得到以下结果:
fname lname email
fernando hernandez fh@yahoo.com
fernando hernandez ts@hotmail.com
IT不应该显示Tyler Smith的姓名&由于transdate条款而发送的电子邮件。我正在寻找一个能让我得到费尔南多结果的人。 我无法改变表格的结构。
答案 0 :(得分:0)
不是。我刚刚创建了一个新表并进行了检查。
表成员
create table member (programid varchar(10), memberid int, fname varchar(10), lname varchar(10), email varchar(25))
内容
+-----------+----------+----------+-----------+----------------+
| PROGRAMID | MEMBERID | FNAME | LNAME | EMAIL |
+-----------+----------+----------+-----------+----------------+
| BLUE | 111 | tyler | smith | ts@hotmail.com |
| GREEN | 111 | fernando | hernandez | fh@yahoo.com |
+-----------+----------+----------+-----------+----------------+
表格文件记录
create table filerecord (fname varchar(10), lname varchar(10), transdate date, memberid int);
内容
+-------+-------+-----------+----------+
| FNAME | LNAME | TRANSDATE | MEMBERID |
+-------+-------+-----------+----------+
| tyler | smith | 7/1/2016 | 111 |
+-------+-------+-----------+----------+
上次查询
SELECT b.fname, b.lname, e.email
FROM filerecord b, member e
WHERE b.memberid IN ('111')
AND b.memberid = e.memberid
AND b.transdate >= TO_DATE ('07/02/2016', 'mm/dd/yyyy');
结果 -
未选择任何行。
答案 1 :(得分:0)
您正在购买笛卡尔积。
您有两个条目memberid
=' 111'在两个表中,所以这个条件
AND b.memberid = e.memberid
将您过滤到4行 -
然后,这个条件:
AND b.transdate >= TO_DATE ('07/02/2016', 'mm/dd/yyyy');
排除其中两个而不是其他两个。
您需要更好的数据模型和/或更精确的方式来加入两个表。
通常,只要您连接两个表,其中一个表应指定其所有主键列以避免此类错误。 (有一些例外情况,一如既往)。
答案 2 :(得分:0)
由于memberid
不是唯一标识符,因此没有理由从b.memberid = e.memberid
这样的连接条件中获得好处。
相反,您似乎建议(或相信)(memberid, fname, lname)
应该是唯一标识符。因此,在连接条件中使用它:
... WHERE ... AND b.memberid = e.memberid
AND b.fname = e.fname
AND b.lname = e.lname
...
像这样:
SQL> SELECT b.fname, b.lname, e.email
2 FROM filerecord b, member e
3 WHERE b.memberid IN ('111')
4 AND b.memberid = e.memberid
5 AND b.fname = e.fname
6 AND b.lname = e.lname
7 AND b.transdate >= TO_DATE ('07/02/2016', 'mm/dd/yyyy');
FNAME LNAME EMAIL
-------------------- -------------------- --------------------
fernando hernandez fh@yahoo.com
1 row selected.