Unable to add WHERE conditions as OR to query object
Am I adding these conditions to the query object correctly (assuming I want them as OR)?


Not quite; all components of the the OR need to be added to the condition object, so you need to do something like this:

$query = db_select('node')-&gt;fields('node', array('nid'));

$db_or = db_or();
$db_or-&gt;condition('type', 'type1')
  -&gt;condition('type', 'type2')
  -&gt;condition('type', 'type3');

$query-&gt;condition($db_or);


That'll give you this query string:

SELECT  node.nid AS nid
FROM 
{node} node
WHERE ( (type = :db_condition_placeholder_0) OR (type = :db_condition_placeholder_1) OR (type = :db_condition_placeholder_2) )



  Is there a way to remove the initial condition so that I could just add my own WHERE condition from scratch?


Yes you can use SelectQuery::where(), but there's really no need. You can use the above, or preferably...


  Is there a better way to do this?


Yes, by using IN as you originally planned:

$query = db_select('node')
  -&gt;fields('node', array('nid'))
  -&gt;condition('type', array('type1', 'type2', 'type3'), 'IN');


That gives:

SELECT  node.nid AS nid
FROM 
{node} node
WHERE  (type IN  (:db_condition_placeholder_0, :db_condition_placeholder_1, :db_condition_placeholder_2)) 


Note that the third parameter of "IN" to condition() isn't strictly necessary, as the DB class automatically assumes "IN" if an array is passed.