我试图用where子句选择两个表,
问题:我得到的结果超过2。像123451111
之类的东西我只有两个值为1的id。我想我做错了。
表格没有相同的结构,也没有任何关联。有什么想法吗?
<?php include_once("config.php");
$s = '1';
$stmt =$mydb->prepare("select * FROM table1,table2 where table1.id = ? or table2.id = ?");
stmt->bind_param('ss', $s, $s);
echo $mydb->error;
$stmt->execute();
?>
<?php
$results = $stmt->get_result();
while ($row = $results->fetch_assoc()) {
echo $row['id']."<br/>";
}
?>
答案 0 :(得分:13)
你需要在table1和table2之间的某个唯一列上加入一个连接,比如id。
select * FROM table1,table2 where table1.id = table2.id;
此外,您可以有多个过滤条件(假设您要过滤id = 101 -
上的表格select *
FROM table1,table2
where table1.id = table2.id
and table1.id = 101;
希望这会有所帮助。每当在SQL语句中有多个表时,您需要加入它们,否则引擎会生成笛卡尔积,就像在数学集理论的笛卡尔积中一样。
基本上你应该至少有n-1个连接条件,其中n是所用表的数量。
答案 1 :(得分:3)
你的问题有点问题,但是如果你的问题没有得到两个id,但你正在使用JOIN正确地得到一个,你可能正在寻找一个IN子句:
SELECT *
FROM table1,table2
WHERE table1.id = table2.id
AND table1.id IN (ID1, ID2);
使用IN而不是=可以将多个值与table.id匹配。这样,您可以从两个表中获取数据,并获得两个ID
答案 2 :(得分:2)
这是加入用法:
select t1.*,t2.* FROM table1 t1
left join table2 t2
on t1.id = t2.id
where t1.id = "keyword"