选择多个表mysql

时间:2013-10-29 04:04:18

标签: php mysql sql mysqli

我试图用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/>";
}
?>

3 个答案:

答案 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"