2012-09-17 132 views
2

我有两个表DETAILS和BANLIST。我搜索DETAILS表以获取IP清单:从两个表中选择sql

select ip, time, othecol from details WHERE somefield=X 

因此我得到零或N条记录。 在同一时间,我需要知道是否返回的IP被禁止或不。我可以这样检查:

select isbanned from banlist WHERE ip=someIP 

是否可以将两个语句合并为一个?

以获取格式列表: ip,time,othercol,isbanned |

回答

2

您可以使用JOIN

SELECT d.ip, d.time, d.othercol, b.isbanned FROM details d 
LEFT JOIN banlist b on b.ip = d.ip 
WHERE d.somefield=X 

注意,b.isbannednull的行中details那些在banlist没有匹配的IP。您可以coalesce该值成假(语法此变化的基础上的关系数据库管理系统你使用的是什么。)

0

查看用于SQL的INNER JOIN keyword

SELECT column_name(s) 
FROM table_name1 
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name 
1

我认为你正在试图做一个简单连接

SELECT d.ip, b.isbanned 
FROM details d 
LEFT JOIN banlist b ON d.ip = b.ip 
WHERE foo=bar